2013-07-04 1 views
4

Возможно ли получить эксклюзивный доступ к Android-микрофону из приложения?Эксклюзивный доступ к микрофону в Android

Я пытаюсь расширить приложение CSipSimple, и моя цель - улучшить его безопасность. Одна из целей, о которых я понятия не имею, как подойти, заключается в блокировании других приложений для записи моих разговоров.

Я загрузил приложение из PlayStore, Call Recorder, которое он вызвал, и он автоматически включается при наборе номера телефона, и он записывает мой телефонный разговор. Это то, чего мне нужно избегать.

Итак, могу ли я запретить любому приложению записывать мой голос, пока я звоню?

ответ

1

Я мало знаю об андроиде, но если получить эксклюзивный доступ к микрофону невозможно, один путь, на который вы можете протестировать, - это контролировать приложения с разрешениями микрофона, если они существуют, и закрыть их с помощью root. Или, когда ваше приложение запущено, вы можете удалить широковещательных слушателей таких приложений, как это делают некоторые менеджеры автозапуска.

+0

Привет. Спасибо за ваш ответ. Мне нужно исследовать, разрешен ли Android для мониторинга приложений, имеющих доступ к микрофону, а также их закрытия. Я должен сделать некоторые исследования здесь. Еще раз спасибо –

+0

Извините за поздний рейтинг. Все исходило из ваших указаний –

+0

... у этого ответа есть зеленый чек?XD – Josh

3

Как упоминалось в Harsha C Alva, один из способов сделать это - перебрать установленные приложения, проверить их разрешения и убить их, если они запущены.

Для того, чтобы перебирать устанавливать приложения

private void iterateInstalledApps() 
{ 
    PackageManager p = this.getPackageManager(); 
    final List <PackageInfo> appinstall = 
     p.getInstalledPackages(PackageManager.GET_PERMISSIONS); 
    for(PackageInfo pInfo:appinstall) 
    { 
     String[] reqPermission=pInfo.requestedPermissions; 
     if(reqPermission!=null) 
     { 
      for(int i=0;i<reqPermission.length;i++) 
      { 
       if (((String)reqPermission[i]).equals("android.permission.RECORD_AUDIO")) 
       { 
        killPackage(pInfo.packageName.toString()); 
        break; 
       } 
      } 
     } 
    }  
} 

Для того, чтобы убить один пакет

private void killPackage(String packageToKill) 
{ 
    ActivityManager actvityManager = 
     (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    final List<RunningAppProcessInfo> procInfos = 
     actvityManager.getRunningAppProcesses(); 
    for (RunningAppProcessInfo runningAppProcessInfo : procInfos) 
    { 
     if(runningAppProcessInfo.processName.equals(packageToKill)) 
     { 
      android.os.Process.sendSignal(runningAppProcessInfo.pid, 
           android.os.Process.SIGNAL_KILL); 
      actvityManager.killBackgroundProcesses(packageToKill); 
     }   
    }  
} 

Вы можете позвонить iterateInstalledApps в таймере, потому что Android является перезапуск приложения на месте. Если вы продолжаете убивать приложение, ему ничего не удастся записать. Тестирование с помощью Call Recorder во время разговора по телефону.

+0

Похож на очень грязный хак :) –

1

Дело в том, что у вас нет доступа к оборудованию прямо в вашем приложении (родной или нет). Андроид реализует серверы для оборудования, которое его управляет, и ваше приложение подключается к ним и получает то, что предоставляют эти серверы ,

Существует отличное видео из парней Android, описывающих эту модель в корпусе медиа-каркаса. here - это ссылка на него.

Таким образом, вы не можете ограничить ограничения доступа в этой модели, при этом другие ответы представляют собой разумный способ убедиться, что к микрофону не обращаются другие.

1

Я уверен, вы можете только получить эксклюзивный доступ к микрофону. Если я пытаюсь использовать два AudioRecord S одновременно я получаю эту ошибку:

E/AudioRecord: start() status -38 

Это буквально единственная информация, которую я нашел на эту тему где-нибудь в Интернете:

https://groups.google.com/forum/#!topic/android-ndk/d7iQm0pyiC0

https://code.google.com/p/android/issues/detail?id=61643