代码之家  ›  专栏  ›  技术社区  ›  j2emanue

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

  •  2
  • j2emanue  · 技术社区  · 6 年前

    enter image description here

    还有一个例子:

    enter image description here

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

    packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
    

    编译器声明找不到AppOpsManager。有什么想法吗?

    2 回复  |  直到 6 年前
        1
  •  6
  •   AlexTa    6 年前

    尝试 AppOpsManager.checkOp (String op, int uid, String packageName) ,在哪里 op OPSTR\u PICTURE\u在\u PICTURE中 常量if支持画中画操作。

    有关详细信息,请查看 this 链接。

        2
  •  8
  •   j2emanue    6 年前

    就像亚历克斯塔说的。但我真的想写代码来节省一些时间:

    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
    }
    
        3
  •  2
  •   Crazy    4 年前

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

    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
        }
    }