目前,我有以下方法可以在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"
        }
    }
}

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

最佳答案

根据权限阻止程序的实现(例如,通过xposed),要么应用程序提供假数据,要么应用程序的进程将被吊销权限。
您将无法检测应用程序是否获取假数据,但在这种情况下,您的应用程序至少不会崩溃。
如果权限在进程级别被撤销,那么ContextCompat.checkSelfPermission()甚至在pre-m上也能检测到它并返回PERMISSION_DENIED。注意,如果使用ContextCompat方法,还必须使用ActivityCompat.shouldShowRequestPermissionRationale()ActivityCompat.requestPermissions()方法或它们的FragmentCompat版本。
有关详细信息,请参见此处:Support library methods for handling permissions

08-05 09:38