ContextCompat.checkSelfPermission的用例是什么?

时间:2015-08-28 12:44:44

标签: android android-support-library android-permissions android-6.0-marshmallow

目前,我有以下方法检查Marshmallow AppCompatActivity的运行时权限:

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
    boolean hasPermission = checkSelfPermission(Manifest.permission.XX)
                == PackageManager.PERMISSION_GRANTED;
    if(!hasPermission) {
        if(shouldShowRequestPermissionRationale(Manifest.permission.XX)) {
            // explain reason for permission, try again

        } else {
            // user deny with "don't show again"
        }
    }
}

到目前为止,我发现它对棉花糖的效果相当好。但是,我应该担心前M版本的许可我应该使用ContextCompat.checkSelfPermission()吗?我知道使用Xposed或类似的框架可以修改pre-M中的权限,这是否意味着ContextCompat.checkSelfPermission()能够充分检测由于Xposed等而导致的权限拒绝?

1 个答案:

答案 0 :(得分:2)

根据权限拦截器的实施情况(例如通过Xposed),应用程序会提供虚假数据,或者应用程序的进程将撤销该权限。

您无法检测到该应用是否会收到虚假数据,但在这种情况下,您的应用至少不会崩溃。

如果在流程级别撤消权限,则ContextCompat.checkSelfPermission()即使在前M上也能够检测到它,并返回PERMISSION_DENIED。请注意,如果您使用ContextCompat方法,则还必须使用ActivityCompat.shouldShowRequestPermissionRationale()ActivityCompat.requestPermissions()方法或其FragmentCompat版本。

有关详情,请参阅此处:Support library methods for handling permissions

相关问题