CAPTURE_AUDIO_OUTPUT在运行时未请求权限

9

我正在尝试从录音机记录声音,但在Android 6+上,我遇到了权限错误。我添加了请求权限的代码(有3个权限需要请求),其中两个能够工作,但是CAPTURE_AUDIO_OUTPUT显示错误。它根本没有询问我授予权限,在日志中只显示“未被授予”。有人知道这个问题出在哪里吗?

 public static boolean PermissionCheck(Activity context, String permission, int code) {
        boolean state = false;
        int permissionCheck = ContextCompat.checkSelfPermission(context,
                permission);
        if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(context, new String[]{permission}, code); // define this constant yourself
        } else {
            // you have the permission
            return true;
        }
        return state;
    }

case CAPTURE_AUDIO_OUTPUT_CONSTANT: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Logger.e("CAPTURE PERMISSION GRANTED");
                    INIT();
                } else {
                    Logger.e("CAPTURE PERMISSION NOT GRANTED");
                    finish();
                }
                return;
            }

错误

W/PackageManager: Not granting permission android.permission.CAPTURE_AUDIO_OUTPUT to package blabla_package (protectionLevel=18 flags=0x3848be46)

在清单文件中

<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"/>

[更新] 经过多次尝试和研究,我现在可以回答: 感谢谷歌,我们现在不能录制通话。 只有使用C代码和NDK才可能实现。


@Hetfieldan24,我在清单文件中有一行代码。 - Peter
@Heena 是的,已经实现了。它只记录麦克风。不知道有没有什么方法可以避免这种情况,但我在 NDK 方面没有经验。 - Peter
@Peter 在 Android 9(不包括)之前,使用 NDK 是可能的。这就是为什么你会看到许多通话录音应用在 Android 9 上无法录制的原因。现在它变得越来越不可能了。也许通过 root 可能可以实现,但仍然很困难。如果您知道如何通过 root 实现它(而不将应用程序设置为系统应用程序),请告诉我。 - android developer
@androiddeveloper 像你一样,我也很想知道是否有可能只通过root访问而不制作系统应用程序来记录上行和下行。如果你找到了答案,请也告诉我。 - Fahime Ghasemi
@FahimeGhasemi 我一点都不清楚。 - android developer
显示剩余3条评论
1个回答

7

CAPTURE_AUDIO_OUTPUT 不是一个 危险的 权限,因此不适用于运行时权限系统。 CAPTURE_AUDIO_OUTPUT 具有 android:protectionLevel="signature|privileged",所以只能由安装在特权(也称为系统)分区或由平台签名密钥签名的应用程序持有。


如何在6+上录制声音?只需将签名密钥添加到应用程序中即可。 - Peter
@Peter:CAPTURE_AUDIO_OUTPUT 不是用于使用麦克风录制声音的权限,那是 RECORD_AUDIO 权限。 - CommonsWare
1
@androiddeveloper:由于它是“特权”应用,在已获取 root 权限的设备上,您应该能够将应用移动到特权分区并以此获得权限。但是,我不知道所有细节,因为 root 场景不是我的专业领域。 - CommonsWare
1
@androiddeveloper:我不知道,抱歉。 - CommonsWare
1
@androiddeveloper:“系统应用程序会自动获得此权限,对吗?”——只有在它们在清单文件中请求时才会自动获取。关于您其他问题,很抱歉我不知道。我从权限行为的角度来回答这个问题;我个人没有使用过这个权限。 - CommonsWare
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接