如何知道用户是否禁用了画中画功能权限?
How to know if user has disabled Picture in Picture feature permission?
这是另一个例子:
从上面的屏幕截图我们看到用户可以禁用画中画模式。您可以在模拟器 api 27 的 "special app access" 屏幕中找到它。我如何检测用户是否禁用了此功能?
我试过检查以下但它不起作用:
packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
编译器指出找不到 AppOpsManager。有什么想法吗?
尝试AppOpsManager.checkOp (String op, int uid, String packageName)
,其中op
是OPSTR_PICTURE_IN_PICTURE操作。如果支持画中画操作,该方法应该return MODE_ALLOWED常量。
有关详细信息,请查看 this link。
就像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
}
我可能迟到了,但这是答案
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
}
}
这是另一个例子:
从上面的屏幕截图我们看到用户可以禁用画中画模式。您可以在模拟器 api 27 的 "special app access" 屏幕中找到它。我如何检测用户是否禁用了此功能?
我试过检查以下但它不起作用:
packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
编译器指出找不到 AppOpsManager。有什么想法吗?
尝试AppOpsManager.checkOp (String op, int uid, String packageName)
,其中op
是OPSTR_PICTURE_IN_PICTURE操作。如果支持画中画操作,该方法应该return MODE_ALLOWED常量。
有关详细信息,请查看 this link。
就像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
}
我可能迟到了,但这是答案
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
}
}