4

是否可以从应用程序获得对 Android 麦克风的独占访问权限?

我正在尝试扩展 CSipSimple 应用程序,我的目标是提高它的安全性。我不知道如何实现的目标之一是阻止其他应用程序记录我的对话。

我从 PlayStore 下载了一个应用程序,它被称为 Call Recorder,当我拨打电话号码并记录我的电话对话时,它会自动启动。这是我需要避免的。

那么,我可以在通话时停止任何应用程序录制我的声音吗?

4

4 回答 4

4

As Harsha C Alva mentioned, one way of doing this is to iterate installed applications, check their permissions and kill them if they are running.

In order to iterate install apps

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;
                }
            }
        }
    }       
}

In order to kill one package

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);
        }           
    }       
}

You can call iterateInstalledApps in a timer because Android is restarting the app on the spot. If you keep killing the application it will not manage to record anything. Testing with Call Recorder while speaking on the phone.

于 2013-07-07T17:44:22.823 回答
1

关于 android 的问题是您无法直接在您的应用程序(本机或非本机)中访问硬件 android 为管理它的硬件实现服务器,您的应用程序连接到它们并获取这些服务器提供的内容。

有一个来自 android 的人的精彩视频在媒体框架案例中描述了这个模型。是它的链接。

因此,不,您不能在此模型中实施访问限制,据说其他答案代表了确保麦克风不被其他人访问的合理方法。

于 2013-07-11T22:25:26.930 回答
1

我对 android 了解不多,但如果无法获得对麦克风的独占访问权限,您可以采取的一种方法是使用麦克风权限监控应用程序(如果存在),然后使用 root 关闭它们。或者,当您的应用程序正在运行时,您可以删除此类应用程序的广播侦听器,就像一些自动运行管理器所做的那样。

于 2013-07-07T07:59:07.333 回答
1

我很确定您只能获得对麦克风的独占访问权限。如果我尝试同时使用两个AudioRecords,我会收到此错误:

E/AudioRecord: start() status -38

这实际上是我在互联网上任何地方找到的有关该主题的唯一信息:

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

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

于 2016-02-25T16:01:12.273 回答