目前,我有以下方法检查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等而导致的权限拒绝?
答案 0 :(得分:2)
根据权限拦截器的实施情况(例如通过Xposed),应用程序会提供虚假数据,或者应用程序的进程将撤销该权限。
您无法检测到该应用是否会收到虚假数据,但在这种情况下,您的应用至少不会崩溃。
如果在流程级别撤消权限,则ContextCompat.checkSelfPermission()
即使在前M上也能够检测到它,并返回PERMISSION_DENIED
。请注意,如果您使用ContextCompat
方法,则还必须使用ActivityCompat.shouldShowRequestPermissionRationale()
和ActivityCompat.requestPermissions()
方法或其FragmentCompat
版本。
有关详情,请参阅此处:Support library methods for handling permissions。