Изключителен достъп до микрофона в 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

Както спомена 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, докато говорите по телефона.

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