Эксклюзивный доступ к микрофону в Android

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

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

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

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


person Iftemi Alin    schedule 04.07.2013    source источник


Ответы (4)


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

person Harsha Alva    schedule 07.07.2013
comment
Привет. Благодарю за ответ. Мне нужно выяснить, является ли Android таким разрешительным, чтобы отслеживать приложения, у которых есть доступ к микрофону, а также закрывать их. Мне нужно провести здесь небольшое исследование. Еще раз спасибо - person Iftemi Alin; 07.07.2013
comment
Извините за позднюю оценку. Все это исходило из ваших указаний - person Iftemi Alin; 14.08.2013
comment
... этот ответ отмечен зеленой галочкой? XD - person Josh; 17.03.2015

Как упоминал Харша Си Альва, один из способов сделать это - перебрать установленные приложения, проверить их разрешения и убить их, если они работают.

Чтобы повторить установку приложений

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 во время разговора по телефону.

person Iftemi Alin    schedule 07.07.2013
comment
Похоже на очень грязный хак :) - person Dmitriy Lozenko; 08.04.2016

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

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

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

person Mr.Me    schedule 11.07.2013

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

E/AudioRecord: start() status -38

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

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

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

person Timmmm    schedule 25.02.2016