关于Android 6.0+ Dangerous Permissions (运行时权限,敏感权限) 《实用篇》
来源:互联网 发布:淘宝怎么进入投诉 编辑:程序博客网 时间:2024/05/18 17:26
权限是一种安全机制。Android权限主要用于限制应用程序内部,某些具有限制性的功能使用,以及应用程序之间的组件访问。
(通俗来讲,你想拍照就需要相机的权限。没有权限,你就无法使用相机功能。)
2.什么又是敏感权限?
Android6.0之后,首先关注的就是权限机制的变化,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的。另一类是Dangerous Permission ,也就是所说的敏感权限,一般是涉及到用户隐私的,需要用户进行授权。
我先来看一下 都有什么权限;
PS :另外需要什么权限直接复制粘贴即可。
Normal Permissions
<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
以下 是 Android 6.0+ (SDK23+)的敏感权限(涉及用户隐私的)和 权限组
权限组 当同一组内的一个权限被授权 ,组内的其他权限同时授权
例如 授权 READ_CONTACTS 的同时 他组内的.WRITE_CONTACTS 和GET_ACCOUNTS 也已经被授权
<!-- 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" />
无论是 Normal Permissions 类 还是 Dangerous Permissions类,任何权限都需要在 AndroidManifest.xml 里注册。
当你的程序安装到安卓版本6.0以上的手机时, Normal Permissions 的权限就已经永久授权。
而那些 Dangerous Permissions 根据手机的不同,有的手机实际上是并没有授权的。
运行时权限 (Runtime Permissions)
运行时权限很好理解,就是 程序运行中,动态申请权限。
拿相机拍照举例。 当点击一个按钮需要调用系统相机的时候, 会弹出一个对话框。
根据手机的不同 对话框的样式也不同。并且,有的对话框 还有 “拒绝后不再询问” 的选项。这个我们稍后说。
既然是动态获取,那就不多说了 直接看代码。
基本流程就是这样。这里需要注意的 ,
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 2); 里的String 数组 不建议多个权限在一起 授权。
最好是把功能分开。 需要什么就授权什么。 可以参考Dangerous Permissions 的权限组, 去分别授权。
现在回头说一下 如果客户点击 “拒绝后不再询问” 的选项 怎么办。
用户拒绝了,真的TMD不会弹对话框了。
但是Google 在 6.0 的系统设置里添加了 权限管理。 每一个程序都有 独立的权限管理页面。 看图
这里所列出来的就是 你 在清单文件里 注册的 所有 敏感权限;这里需要用户手动设置的。
在程序上 所需要做的就是 将逻辑做好。 给好充足的提示。
要是真碰上傻逼 用户,我就只能呵呵了。
本人写了几个项目, 6.0 刚更新的时候 被这个权限机制坑的挺惨,当时市面上用了6.0 的手机不是很多。 恰巧我的项目的 targetSdkVersion 是 23+ 导致没提前做好新版本的预习,栽了跟头。
其实这里还有一个解决办法就是 在 build.gradle 里将 targetSdkVersion 和 compileSdkVersion 改成小于 23。 6.0+ 的系统 会自动识别你的程序是基于老版本开发, 就会 执行老版本的权限授权。
但是我这里不建议这么做。与时俱进吧。过去的东西 早晚会被淘汰。
分享几句名言
如果一开始你没能成功,拿个更大的锤子。 -- 艾伦·路易斯
如果拿不准一句名言是谁说的,就说是马克·吐温说的。—马克·吐温
- 关于Android 6.0+ Dangerous Permissions (运行时权限,敏感权限) 《实用篇》
- Android 运行时权限 Runtime Permissions
- App权限—normal and dangerous permissions
- Android 6.0 Runtime Permissions运行权限学习笔记
- Android 6.0 权限模型——Permissions
- Android 6.0 Dangerous Permissions与授权机制
- Android Dangerous Permissions
- (6.0及以上)运行时获取危险权限(Dangerous Permission)
- Android 6.0 应用权限(一) -- 系统权限(System Permissions)
- ionic学习之Android6.0 运行时权限插件cordova-plugin-android-permissions
- Android 的权限(Permissions)
- Android M Permissions 权限管理
- Android 6.0运行时权限
- Android 6.0运行时权限
- Android 6.0运行时权限
- Android 6.0+ 运行时权限
- Android 6.0运行时权限
- Android 6.0运行时权限
- 你所知道的 Java生成对象的五种方式
- Javascript 关键字(keywords)、保留字(reservedwords)
- Python 基础语法
- ubuntu 下 如何将 doc 转 txt
- Android SDK上手指南:项目清单
- 关于Android 6.0+ Dangerous Permissions (运行时权限,敏感权限) 《实用篇》
- Codeforces 733D Kostya the Sculptor 贪心
- JAVA的StringBuffer类
- MySQL性能优化的21条最佳经验
- 交大博士血泪自述:不是读博的料,别上博士这条船
- Android SDK上手指南:应用程序数据
- try catch 不到异常的处理
- POJ Problem 1664 放苹果
- SQL触发器实例学习