今天想对SDK 进行对6.0适配做一些适配调整,测到对存储卡权限申请,测试过程中发现不管权限打开还是关闭,返回的都是权限打开
刚开始以为使用模拟器测试引起的,用真机测试也是相同现象,不禁怀疑是其他配置引起的。查看一下是gradle 配置问题,
即 targetSdkVersion 没有达到 23,低于23的时候会把申请的权限默认分配给该应用,但是用户通过系统设置关闭对应权限,
在程序运行时进行检测是无效的ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE),
关闭权限再调用也是不起作用的,就会引起莫名的程序问题。如果把程序的 targetSdkVersion 改成23,就可以正常查看权限了,
但是第一次安装会进行相应权限申请,这种会在用户打开程序的时候有权限申请弹窗。
当前程序 targetSdkVersion 版本检测:
try { final PackageInfo info = context.getPackageManager().getPackageInfo( context.getPackageName(), 0); targetSdkVersion = info.applicationInfo.targetSdkVersion; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }