是否可以从应用程序获得对Android麦克风的独占访问权?
我正在尝试扩展CSipSimple应用程序,我的目标是提高它的安全性。 其中一个我不知道如何处理的目标是阻止其他应用程序记录我的对话。
我已经从PlayStore下载了一个应用程序,它已经调用了Call Recorder,当我拨打一个电话号码并且正在录制我的电话对话时,它会自动启动。 这就是我需要避免的。
那么,我可以在通话时阻止任何应用程序录制我的声音吗?
答案 0 :(得分: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正在重新启动应用程序。如果你继续杀死应用程序,它将无法记录任何内容。在通话时使用通话记录器进行测试。
答案 1 :(得分:1)
我对Android知之甚少,但如果无法获得对麦克风的独占访问权限,那么您可以使用的一条路径是具有麦克风权限的监控应用程序(如果存在),并使用root关闭它们。或者当您的应用程序运行时,您可以删除此类应用程序的广播侦听器,就像某些自动运行管理器那样。
答案 2 :(得分:1)
关于android的事情是你无法直接在你的应用程序中访问硬件(本机或非本机)android实现服务器,用于管理它的硬件,你的应用程序连接到它们并获得这些服务器提供的内容。
有一个很棒的视频来自Android玩家在媒体框架案例中描述这个模型。 here是指向它的链接。
所以不,你不能在这个模型中限制访问限制,据说其他答案代表了确保其他人不会访问麦克风的合理方法。
答案 3 :(得分:1)
我很确定您只能 获得对麦克风的独占访问权限。如果我尝试同时使用两个AudioRecord
,我会收到此错误:
E/AudioRecord: start() status -38
这实际上是我在互联网上任何地方找到的唯一信息:
https://groups.google.com/forum/#!topic/android-ndk/d7iQm0pyiC0