Android 6.0(API 23) 运行时权限
2017-10-18 17:32
429 查看
背景
公司的一个二手项目中,经常有客户反映不能上传照片,不能定位,反正就是各种问题吧。早就知道是因为权限的问题,但是一直忙于加新功能,没得空去修改这部分,最近终于有时间把权限的问题好好梳理一下了。原来只在APP开启的时候申请一下权限,用户点击了拒绝也不会有什么特殊的提示,导致一部分点击了拒绝的用户在使用的时候却不能用。关于运行时权限
从Android 6.0开始,权限系统被重新定义,发生了颠覆性的变化。不再像以前一样,安装APP及默认接受权限所有的权限,有些权限我们在用APP的时候并不会使用到。而到了6.0以后,我们可以先安装APP,到使用过程中遇到权限问题再选择是否授予某个权限。对于一些不合理的权限直接拒绝,比如我下载个单击游戏,它申请任何权限我都是拒绝的。也可以到设置界面对每个权限去授权或解除授权。哪些需要运行时权限
新的权限策略将权限分为两类,第一类是不涉及用户隐私的,只需要在AndroidManifest.xml文件中声明即可,比如网络,蓝牙,NFC;第二类是涉及到用户隐私的,比如位置,电话等权限。不涉及用户隐私的(Normal Permissions)
这类权限安装即授权,不用运行时检查,而且用户也不能取消授权,除非卸载APP。<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.BROADCAST_STICKY"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/> <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.NFC"/> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/> <uses-permission android:name="android.permission.READ_SYNC_STATS"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.REORDER_TASKS"/> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> <uses-permission android:name="android.permission.SET_TIME_ZONE"/> <uses-permission android:name="android.permission.SET_WALLPAPER"/> <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/> <uses-permission android:name="android.permission.TRANSMIT_IR"/> <uses-permission android:name="android.permission.USE_FINGERPRINT"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
运行时权限(Dangerous Permissions)
此类权限也必须在AndroidManifest.xml中声明,否则申请时不提示用户,直接回调开发者权限被拒绝。同一个权限组的任何一个权限被授权了,这个权限组的其他权限也自动被授权。例如一旦WRITE_CONTACTS被授权了,APP也有READ_CONTACTS和GET_ACCOUNTS了。
申请某一个权限的时候系统弹出的Dialog是对整个权限组的说明,而不是单个权限。例如我申请READ_EXTERNAL_STORAGE,系统会提示”允许xxx访问设备上的照片、媒体内容和文件吗?”。
<!-- CALENDAR 日历组 --> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <!-- CAMERA 相机拍照组 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- CONTACTS 联系人组 --> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- LOCATION 定位组 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- MICROPHONE 麦克风组 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- PHONE 组 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_CALL_LOG" /> <uses-permission android:name="android.permission.WRITE_CALL_LOG" /> <uses-permission android:name="android.permission.USE_SIP" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <!-- SENSORS 传感器组 --> <uses-permission android:name="android.permission.BODY_SENSORS" /> <!-- SMS 组 --> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" /> <uses-permission android:name="android.permission.RECEIVE_MMS" /> -- STORAGE 存储组 -- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
相关文章推荐
- Android 6.0(API 23) 运行时权限(二)之权限申请
- 【译】Android开发者应该知道的API6.0以上运行时权限
- [置顶] Android 6.0(API 23)及其以上动态申请的权限与申请权限的方法
- API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全。
- Android 6.0(API 23)后的权限问题
- Android 6.0(API 23)之后需动态申请权限的问题
- Android 6.0(API 23) 含以上 java.lang.SecurityException 权限需动态申请(危险权限)
- Android 6.0 运行时权限管理最佳实践
- Android数据存储之Android 6.0运行时权限下文件存储
- Android 6.0 运行时权限处理完全解析
- 聊一聊Android 6.0的运行时权限
- Android 6.0 运行时权限
- Android 6.0 运行时权限处理
- Android 6.0+新的运行时权限 开发者需要知道的一切
- Android 6.0权限管理,sdk>=23请求权限
- android 6.0运行时权限的申请(微信在android 6.0上实现运行时请求权限的实现)
- Android 6.0版本以后运行时权限提醒
- 【Android】Android 6.0 运行时权限
- Android 6.0 运行时权限处理
- Android学习之6.0系统运行时权限设置