- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
目前我有以下方法来检查 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"
}
}
}
到目前为止,我发现它对 Marshmallow 的效果相当好。但是,我是否应该担心我应该使用的 M 之前版本的权限 ContextCompat.checkSelfPermission()反而?我知道可以使用 Xposed 或类似框架修改 pre-M 中的权限,这是否意味着 ContextCompat.checkSelfPermission()
也能够充分检测到由于 Xposed 等原因导致的权限拒绝?
最佳答案
根据权限拦截器的实现(例如,通过 Xposed),应用程序会被提供虚假数据,或者应用程序的进程将被撤销权限。
您将无法检测到该应用是否获取了虚假数据,但在这种情况下,您的应用至少不会崩溃。
如果权限在进程级别被撤销,那么 ContextCompat.checkSelfPermission()
甚至可以在 pre-M 上检测到它并返回 PERMISSION_DENIED
。请注意,如果您使用 ContextCompat
方法,您还必须使用 ActivityCompat.shouldShowRequestPermissionRationale()
和 ActivityCompat.requestPermissions()
方法或其 FragmentCompat
版本。
查看此处了解更多详情:Support library methods for handling permissions .
关于android - ContextCompat.checkSelfPermission 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32271400/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!