【问题标题】:Exclusive access to the microphone in Android独家访问 Android 中的麦克风
【发布时间】:2016-02-26 00:01:12
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android security microphone


    【解决方案1】:

    正如 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 会在现场重新启动应用程序。如果您继续杀死该应用程序,它将无法记录任何内容。在通话时使用通话记录器进行测试。

    【讨论】:

    • 看起来很肮脏的 hack :)
    【解决方案2】:

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

    【讨论】:

    • 嗨。谢谢你的回答。我需要调查 Android 是否允许监控可以访问麦克风的应用程序并关闭它们。我必须在这里做一些研究。再次感谢
    • 抱歉,评分晚了。这一切都来自你的迹象
    • ...这个答案有绿色检查? XD
    【解决方案3】:

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

    有一个很棒的视频,来自 android 的家伙在媒体框架案例中描述了这个模型。 here 是它的链接。

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

    【讨论】:

      【解决方案4】:

      我很确定您只能获得对麦克风的独占访问权限。如果我尝试同时使用两个 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        相关资源
        最近更新 更多