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