如何知道用户是否已禁用“画中画”功能权限?

时间:2018-10-01 15:18:45

标签: android android-picture-in-picture

enter image description here

这是另一个示例:

enter image description here

从上面的屏幕截图中我们看到用户可以在图片模式下禁用图片。您可以在模拟器api 27的“特殊应用程序访问”屏幕中找到它。如何检测用户是否已禁用此功能?

我尝试检查以下内容,但不起作用:

packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)

编译器指出找不到AppOpsManager。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

尝试AppOpsManager.checkOp (String op, int uid, String packageName),其中op OPSTR_PICTURE_IN_PICTURE 操作。如果支持画中画操作,则该方法应返回 MODE_ALLOWED 常量。

有关更多信息,请检查this链接。

答案 1 :(得分:2)

就像AlexTa所说的那样。但我想实际编写代码以节省一些时间:

private fun hasPermission(): Boolean {
    val appOps = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
    } else {
        return false
    }
    return appOps.checkOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, android.os.Process.myUid(), packageName) == AppOpsManager.MODE_ALLOWED
}

答案 2 :(得分:1)

我可能会迟到,但这是答案

private fun hasPermission(): Boolean {
    val appOps = getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager?
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            appOps?.unsafeCheckOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, android.os.Process.myUid(), packageName) == AppOpsManager.MODE_ALLOWED
        } else {
            appOps?.checkOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, android.os.Process.myUid(), packageName) == AppOpsManager.MODE_ALLOWED
        }
    } else {
        false
    }
}