Android 6.0修改系统权限分析(一)

本文探讨了在Android 6.0中,如果app的targetSdkVersion低于23,即使用户手动禁止权限,checkSelfPermission()仍会返回PERMISSION_GRANTED的现象。文章指出,这种情况下无法直接通过此方法判断用户是否撤销了权限,并预告下篇将讨论权限的手动开关情况,同时推荐了一个权限管理的封装库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 6.0之后敏感权限默认是关闭的,必须显式的去请求这个权限。而在6.0之前,只要你在manifest里面声明过所需要的权限,安装之后默认是开启的,下面我们来分析一下遇到的问题。
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

项目中需要写系统设置的权限,该权限可以设置音量,调节明暗,测试手机系统是Android 6.0的,当在gradle中设置targetsdkversion版本为22时,安装默认这个权限是开启的,设置为23(Android 6.0)时,这个权限则是关闭的,这是为什么呢?

首先,我们要分析一下gradle配置中的 targetSdkVersion这个配置 Android开发的应该都见过 compileSdkVersion、minSdkVersion 以及 targetSdkVersion。compileSdkVersion和minSdkVersion比较好理解,前者表示编译的SDK版本,后者是最低适配的SDK版本。对于targetSdkVersion,字面的意思是目标SDK版本,但是它不仅仅是目标SDK字面意思这么简单。很难一句话说清楚。原文中用了『interesting』这个单词来描述targetSdkVersion。原文中是这样讲的:targetSdkVersion is the main way Android provides forward compatibility。意思是targetSdkVersion 是 Android 系统提供向前兼容的主要手段。随着 Android 系统的升级,某个系统的 API 或者模块的行为可能会发生改变,但是,只要 APK 的 targetSdkVersion 不变,即使这个 APK 安装在新 Android 系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的向前兼容性。

所以targetSdkVersion设置要慎之又慎,在你没有完全了解新版本特性的情况下,设置为新版本兼容将会给你造成莫名其妙的错误。

以下权限只要targetSdkVersion 设置低于23,在AndroidManifest.xml中声明即可使用:
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS 
android.permission.ACCESS_NETWORK_STATE 
android.permission.ACCESS_NOTIFICATION_POLICY 
android.permission.ACCESS_WIFI_STATE 
android.permission.ACCESS_WIMAX_STATE 
android.permission.BLUETOOTH 
android.permission.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值