Android 6.x 运行时权限

来源:互联网 发布:js产生随机数的函数 编辑:程序博客网 时间:2024/05/22 07:48

有个队友离职了,导致最近忙的手打后脚跟,也没时间写博客了。

好不容易这两天闲了一点,赶快更新一篇。

关于Android6.0以上运行时权限,做过的估计都头疼了两天,做完了之后发现也不过如此。

我在做的时候却因为种种原因,导致已经发版上线的版本在Android6.0以上系统出现问题不能正常使用,确切的说不包含Android6.0,因为6.0的手机有的可以使用。不得已只有紧急再发一版,把android:targetSdkVersion="23"改为android:targetSdkVersion="22"表示我们还没有准备好适配6.0以上的手机。

出现这个问题的原因一部分是因为我们的测试机最高的系统版本就是6.0,包括华为P9、mate8,还有同事的一部小米,上线之前测试均能正常使用。另一本分原因是当时本来说是下一版再适配6.0,而我的一位队友却已经把sdk替换到了23,在测试机上运行之后发现读取短信验证码和系统联系人的功能不能使用,然后就在网上找找代码搞了一下发现没有什么问题就发版上线了。上线之后收到用户投诉之后才发现事情的严重性,只得紧急发版并且跟新提示6.0以上用户必须卸载后重新下载安装,因为我们的应用打开时在引导页要拿到用户的设备id,并且想持续更新应用的话还需要拿到sd卡存储的写入权限,而线上的版本对于6.0以上的手机并没有像用户申请这两个权限,所以Android6.0的手机必须重新安装。

对于为什么在Android6.0手机上并没有出现的权限问题而到了用户那里却出现了呢?终于在同时那里找到了两个Android6.0.1的手机发现了同样的问题,调试之后发现问题确实很严重,个人看法是Android6.0以上的系统越高对权限问题的处理就会越严格。问题已经发生只能正视它然后解决它,网上看了一些帖子,下了两个demo,终于找到了针对于我的程序能够比较好处理的办法。

言归正传,由于Android的特殊性,使用Android手机的用户一旦安装了一些不怀好意的app,开发者能做的事情确实是有点多了,对这部分手机的用户造成的隐患很大。而google那边也一直在致力于解决这个问题,终于Android6.0棉花糖推出,app将不会在安装时一刀切的授予应用权限,取而代之的是一些对用户来说比较危险的权限,app不得不在运行时一个一个询问用户,用户授予之后才能够获得。

一般权限,PROTECTION_NORMAL类权限,应用安装时自动授予,不需询问授权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT

危险权限,应用中需要此类权限是需要向用户申请授权,从下图大家可以看到这类权限是分组的,目前来看同一组内的某一权限被授权之后同一组的其他权限也会同样被授权,但是我不建议大家依赖于这个做法图省事,以后说不定这个分组会取消。还是用到了哪个权限就老老实实去向用户申请比较好。


还有几个特殊权限和其他权限,一般用不到,这里就不多说了。

首先,大家可以先对自己工程里用到的权限进行分类分组,像这样:


然后是权限问题的具体处理,代码献上:

需要申请权限的页面:

权限处理中间页面:
权限检测器:

大家可以根据自己项目的实际情况作为参考,demo地址:http://download.csdn.net/detail/cunjicsdn/9695519


                                                                                       



2 0
原创粉丝点击