Android 调用checkSelfPermission,不管用户是否取消授权,checkSelfPermission的返回值始终为PERMISSION_GRANTED的解决办法
来源:互联网 发布:淘宝店铺管理工具 编辑:程序博客网 时间:2024/06/07 17:41
Android M运行targetSdkVersion < 23的应用时,调用checkSelfPermission,不管用户是否取消授权,checkSelfPermission的返回值始终为PERMISSION_GRANTED的解决办法
If your application is targeting an API level before 23 (Android M) then both:ContextCompat#checkSelfPermission and Context#checkSelfPermission doesn't work and always returns 0 (PERMISSION_GRANTED). Even if you run the application on Android 6.0 (API 23).
It's not fully true that if you targeting an API level before 23 then you don't have to take care of permissions. If you targeting an API level before 23 then:
Android < 6.0: Everything will be ok.
Android 6.0: Application's run-time permissions will be granted by default (compatibility mode applies), but the user can change run-time permissions in Android Settings, then you may have a problem.
As I said in the 1st point, if you targeting an API level before 23 on Android 6.0 then ContextCompat#checkSelfPermission and Context#checkSelfPermission doesn't work. Fortunately you can use PermissionChecker#checkSelfPermission to check run-time permissions.
Example code:
public boolean selfPermissionGranted(String permission) { // For Android < Android M, self permissions are always granted. boolean result = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (targetSdkVersion >= Build.VERSION_CODES.M) { // targetSdkVersion >= Android M, we can // use Context#checkSelfPermission result = context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED; } else { // targetSdkVersion < Android M, we have to use PermissionChecker result = PermissionChecker.checkSelfPermission(context, permission) == PermissionChecker.PERMISSION_GRANTED; } } return result; }
In order to obtain target Sdk Version you can use:
try { final PackageInfo info = context.getPackageManager().getPackageInfo( context.getPackageName(), 0); targetSdkVersion = info.applicationInfo.targetSdkVersion; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }
It works on Nexus 5 with Android M.
- Android 调用checkSelfPermission,不管用户是否取消授权,checkSelfPermission的返回值始终为PERMISSION_GRANTED的解决办法
- checkSelfPermission总是返回PERMISSION_GRANTED
- checkSelfPermission 无效的解决办法
- targetSdkVersion<23中调用checkSelfPermission的问题
- targetSdkVersion 23以下6.0中调用checkSelfPermission的问题
- Android 6.0 手机 Checkselfpermission无效
- android checkSelfPermission方法使用注意
- checkSelfPermission 失效
- Android: java.lang.NoSuchMethodeError: xxx.xxx.checkSelfPermission
- checkSelfPermission 找不到 Android 动态权限问题
- Android 23以下 checkSelfPermission 失败记录
- Android权限检查API checkSelfPermission失效问题
- Android权限检查API checkSelfPermission失效问题
- 安卓游戏接入的时候遇到的找不到V4包的方法checkSelfPermission
- can't find referenced method 'int checkSelfPermission(java.lang.String) 混淆失败的问题
- checkSelfPermission 检查权限失效
- readyState状态值始终为1的解决办法
- u.aly.bt: can't find referenced method 'int checkSelfPermission(java.lang.String)' 混淆失败的问题
- Java设计模式六大原则之场景应用分析
- Maolin 的第一篇博客
- xtrabackup 备份从库,建立新的从库
- 前段跨域 https到http请求
- APIClound android和ios的控制台调试
- Android 调用checkSelfPermission,不管用户是否取消授权,checkSelfPermission的返回值始终为PERMISSION_GRANTED的解决办法
- 【排序算法】归并排序原理及Java实现
- nagios安装配置教程,远程监控服务器配置。
- Linux学习01
- OpenWrt MVC架构 添加页面
- 移动平台青睐的数据库-SQLite
- NMEA-0183协议
- navisworks 按钮控制漫游的移动,前进、后退、左转、右转
- [Lpp]PHP中错误的分类