目前我有以下方法来检查运行时权限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"
}
}
}
到目前为止,我发现它对棉花糖来说效果相当好。但是,我是否应该担心我应该使用的 pre-M 版本中的权限ContextCompat.checkSelfPermission() http://developer.android.com/reference/android/support/v4/content/ContextCompat.html#checkSelfPermission(android.content.Context,%20java.lang.String)反而?我知道 pre-M 中的权限可以通过使用 Xposed 或类似框架进行修改,这是否意味着ContextCompat.checkSelfPermission()
是否也能够充分检测由于 Xpose 等原因导致的权限拒绝?
根据权限拦截器的实现(例如通过 Xposed),要么为应用程序提供虚假数据,要么应用程序的进程将被撤销权限。
您将无法检测应用程序是否获取虚假数据,但在这种情况下您的应用程序至少不会崩溃。
如果在进程级别撤销权限,则ContextCompat.checkSelfPermission()
即使在 pre-M 和返回时也能够检测到它PERMISSION_DENIED
。请注意,如果您使用ContextCompat
方法你还必须使用ActivityCompat.shouldShowRequestPermissionRationale()
and ActivityCompat.requestPermissions()
方法或它们的FragmentCompat
版本。
请参阅此处了解更多详细信息:支持处理权限的库方法 https://developer.android.com/preview/features/runtime-permissions.html#support-lib.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)