android 动态权限添加 ,你不得不学
来源:互联网 发布:阿里云字体图标 编辑:程序博客网 时间:2024/04/26 23:09
为了用户权限的更好的控制,保护好用户的隐私,android在API23上面开始使用了动态全选的设置,对于这个引起的问题呢
1.如果你给你的App配置的targetSdkVersion设置的低于23的话,app会认为你没有在android6上进行测试,所以在app安装的时候会把所有的权限给列出来,然后"强迫"用户默认所有权限授权进行安装,(不受授权,不安装)
2,如果用户在设置中关闭权限的话会导致你的应用没有权限开启不了对应的功能,然后对应的操作也就会返回null或者0,然后后果的话你也就知道了。。。。
3.你的targetSdkVersion设置的不低于23,那么对于一些涉及隐私的你就要去动态的添加,我们先来看下权限的分类吧:
权限2大分类
PROTECTION_NORMAL权限 ,应用安装的时候授权(这些权限的话都是不涉及隐私的。用户也是不能关闭的)都有:
android.permission.ACCESS LOCATIONEXTRA_COMMANDS
android.permission.ACCESS NETWORKSTATE
android.permission.ACCESS NOTIFICATIONPOLICY
android.permission.ACCESS WIFISTATE
android.permission.ACCESS WIMAXSTATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE NETWORKSTATE
android.permission.CHANGE WIFIMULTICAST_STATE
android.permission.CHANGE WIFISTATE
android.permission.CHANGE WIMAXSTATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND STATUSBAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET PACKAGESIZE
android.permission.INTERNET
android.permission.KILL BACKGROUNDPROCESSES
android.permission.MODIFY AUDIOSETTINGS
android.permission.NFC
android.permission.READ SYNCSETTINGS
android.permission.READ SYNCSTATS
android.permission.RECEIVE BOOTCOMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST INSTALLPACKAGES
android.permission.SET TIMEZONE
android.permission.SET_WALLPAPER
android.permission.SET WALLPAPERHINTS
android.permission.SUBSCRIBED FEEDSREAD
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE SYNCSETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT
Dangerous Permissions: 设计隐私的权限,需要你去动态申请的
android.permission-group.CALENDAR
android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR
android.permission-group.CAMERA
android.permission.CAMERA
android.permission-group.CONTACTS
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.GET_ACCOUNTS
android.permission-group.LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
android.permission-group.MICROPHONE
android.permission.RECORD_AUDIO
android.permission-group.PHONE
android.permission.READ_PHONE_STATE
android.permission.CALL_PHONE
android.permission.READ_CALL_LOG
android.permission.WRITE_CALL_LOG
com.android.voicemail.permission.ADD_VOICEMAIL
android.permission.USE_SIP
android.permission.PROCESS_OUTGOING_CALLS
android.permission-group.SENSORS
android.permission.BODY_SENSORS
android.permission-group.SMS
android.permission.SEND_SMS
android.permission.RECEIVE_SMS
android.permission.READ_SMS
android.permission.RECEIVE_WAP_PUSH
android.permission.RECEIVE_MMS
android.permission.READ_CELL_BROADCASTS
android.permission-group.STORAGE
android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
首先你可能会有惊讶,为啥这个还分组了,其实这也是大google方便我们,只要你申请了一组里面的任一个权限,他会将相关的权限附带给你授权了,比如你申请了位置权限loaction中的ACCESS_FINE_LOCATION ,那么对应的该loaction 的ACCESS_COARSE_LOCATION权限你也会被授权了(只要你在manifest中有注册了)(不过如果你是个谨慎的人的话,还是老老实实的对每一个权限去申请,因为你指不定这个分组会变,毕竟 everything is possible)
相关的google的api文段
http://developer.android.com/training/permissions/requesting.html
http://developer.android.com/guide/topics/security/permissions.html
如何去申请权限
1. 配置权限 和以前一样,先都是在manifest中配置好需要的所有的权限
2.检查权限是否获取到 使用
if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED) {//需要申请授权了}else{ }
注:ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS),判断权限是否授权,返回的值是PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED。当返回DENIED就需要进行申请授权了
3申请授权代码
ActivityCompat.requestPermissions(activty,new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
CODE_FOR_WRITE_PERMISSION);
参数的话第一个 Context,第二个是授权的权限数组,第三个是requestCode,主要用于回调的时候检测。第二个参数的话传多个权限的话,就会弹出多个授权的对话框 , ⚠️ 这里面的弹出对话框是不能进行定制的,是由各个手机去定制的比如gengenymotion上面的框是
4.不用说接下来就是对弹出框的两个按钮的选择监听了
@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
}
}GitHub上的封装
你可以在github上面搜索到android permission就可以找到 很多的相关库,你选一个就OK了,这里就不做啰嗦了,(其实也就是懒癌有犯了)
<a href=""http://blog.csdn.net/lmj623565791/article/details/50709663">http://blog.csdn.net/lmj623565791/article/details/50709663
出自鸿洋之手了
- android 动态权限添加 ,你不得不学
- Android中已经添加权限,依然提示缺少权限,此时你需要添加动态权限
- Android中已经添加权限,依然提示缺少权限,此时你需要添加动态权限
- Android中已经添加权限,依然提示缺少权限,此时你需要添加动态权限
- Android动态广播添加权限
- android 6.0动态权限添加
- android 6.0动态权限添加
- android 6.0动态添加权限
- Android 6以上需要动态的添加权限~你知道么?
- 解决Android 6.0动态添加权限问题
- android动态添加权限6.0+--权限操作jar简化添加权限步骤。
- 6.0权限动态添加
- 动态添加权限
- 动态添加权限
- 你不得不学的 16个Linux服务器监控命令
- 学android开发 不得不去的好地方
- 学android开发 不得不去的好地方
- android 添加各种权限
- SQL语句执行计划
- 一句话概括下spring框架及spring cloud框架主要组件
- JSP页面tdl自定义标签的做法
- IEEE 802.15.4协议完整中文版 - 5.1.2.4 - 5.1.2.5
- ubantu16.04在Firefox上安装Adobe Flash Player
- android 动态权限添加 ,你不得不学
- redis集群安装配置数据迁移和客户端(java方向)第三节,客户端
- 《Android音频焦点机制深入理解》
- OpenWrt基于HAProxy的透明代理负载均衡和高可用部署
- 安卓打包apk,iOS打包ipa
- VxWorks的Socket通信(二)
- gradle编译过慢的解决办法
- Mysql基本操作
- 记录