Android 6.0权限申请
2017-07-19 18:03
211 查看
一、6.0需要处理哪些权限?
6.0之前,只要在mainfest申请即可。
6.0之后:
相对的非普通权限(Dangrous Permission)如下:
通过adb shell pm list permissions -d -g 查看
二、6.0权限处理
两种办法:
a:targetSdk如果设置为22及以下,则同6.0之前,直接在清单文件申请即可。
b:targetSdk>=23,动态申请权限。
思路:应用启动或在需要权限的时候判断是否已有对应权限,若无,则对需要的权限进行申请。若用户拒绝,做出对应的处理。
动态申请权限:
流程:清单文件申请—–>权限检查—–>申请权限—–>权限回调
1.清单文件申请
2.权限检查
3.申请权限
这里使用了requestPermissions API,前两个参数同checkSelfPermission,第三个参数是int型的权限请求码。
如果想申请权限时附带解释,可以使用下面这个API
4.权限申请回调
实现OnRequestPermissionsResultCallback接口中的onRequestPermissionsResult方法。
第一个参数:请求码,第二个参数请求权限的集合,第三个参数对应权限申请的结果集。
如果被用户点击返回,则结果集长度为0。
grantResults[0] == PackageManager.PERMISSION_GRANTED表示 第一个申请的权限已被授权。
关于权限的封装后续补充。
6.0之前,只要在mainfest申请即可。
6.0之后:
普通权限(Normal Permission)同6.0之前。普通权限是不涉及用户隐私的。 如下: ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCESS_NOTIFICATION_POLICY ACCESS_WIFI_STATE BLUETOOTH BLUETOOTH_ADMIN BROADCAST_STICKY CHANGE_NETWORK_STATE CHANGE_WIFI_MULTICAST_STATE CHANGE_WIFI_STATE DISABLE_KEYGUARD EXPAND_STATUS_BAR GET_PACKAGE_SIZE INSTALL_SHORTCUT INTERNET KILL_BACKGROUND_PROCESSES MODIFY_AUDIO_SETTINGS NFC READ_SYNC_SETTINGS READ_SYNC_STATS RECEIVE_BOOT_COMPLETED REORDER_TASKS REQUEST_INSTALL_PACKAGES SET_ALARM SET_TIME_ZONE SET_WALLPAPER SET_WALLPAPER_HINTS TRANSMIT_IR UNINSTALL_SHORTCUT USE_FINGERPRINT VIBRATE WAKE_LOCK WRITE_SYNC_SETTINGS
相对的非普通权限(Dangrous Permission)如下:
通过adb shell pm list permissions -d -g 查看
Dangerous Permissions: group:android.permission-group.CONTACTS permission:android.permission.WRITE_CONTACTS permission:android.permission.GET_ACCOUNTS permission:android.permission.READ_CONTACTS group:android.permission-group.PHONE permission:android.permission.READ_CALL_LOG permission:android.permission.READ_PHONE_STATE permission:android.permission.CALL_PHONE permission:android.permission.WRITE_CALL_LOG permission:android.permission.USE_SIP permission:android.permission.PROCESS_OUTGOING_CALLS permission:com.android.voicemail.permission.ADD_VOICEMAIL group:android.permission-group.CALENDAR permission:android.permission.READ_CALENDAR permission:android.permission.WRITE_CALENDAR group:android.permission-group.CAMERA permission:android.permission.CAMERA group:android.permission-group.SENSORS permission:android.permission.BODY_SENSORS group:android.permission-group.LOCATION permission:android.permission.ACCESS_FINE_LOCATION permission:android.permission.ACCESS_COARSE_LOCATION group:android.permission-group.STORAGE permission:android.permission.READ_EXTERNAL_STORAGE permission:android.permission.WRITE_EXTERNAL_STORAGE group:com.sina.weibo.permission-group permission:com.sina.weibo.permission.USER group:android.permission-group.MICROPHONE permission:android.permission.RECORD_AUDIO group:android.permission-group.SMS permission:android.permission.READ_SMS permission:android.permission.RECEIVE_WAP_PUSH permission:android.permission.RECEIVE_MMS permission:android.permission.RECEIVE_SMS permission:android.permission.SEND_SMS permission:android.permission.READ_CELL_BROADCASTS ungrouped: permission:com.xiaomi.xmsf.permission.PAYMENT permission:com.dsi.ant.permission.ANT permission:miui.permission.ACCESS_BLE_SETTINGS permission:com.dsi.ant.permission.ANT_ADMIN
二、6.0权限处理
两种办法:
a:targetSdk如果设置为22及以下,则同6.0之前,直接在清单文件申请即可。
b:targetSdk>=23,动态申请权限。
思路:应用启动或在需要权限的时候判断是否已有对应权限,若无,则对需要的权限进行申请。若用户拒绝,做出对应的处理。
动态申请权限:
流程:清单文件申请—–>权限检查—–>申请权限—–>权限回调
1.清单文件申请
略
2.权限检查
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { }else{ // } 这里用了 ContextCompat.checkSelfPermission的API,第一个参数是Context,第二个参数是权限。
3.申请权限
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
这里使用了requestPermissions API,前两个参数同checkSelfPermission,第三个参数是int型的权限请求码。
如果想申请权限时附带解释,可以使用下面这个API
ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,Manifest.permission.READ_CONTACTS)
4.权限申请回调
实现OnRequestPermissionsResultCallback接口中的onRequestPermissionsResult方法。
@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; } } }
第一个参数:请求码,第二个参数请求权限的集合,第三个参数对应权限申请的结果集。
如果被用户点击返回,则结果集长度为0。
grantResults[0] == PackageManager.PERMISSION_GRANTED表示 第一个申请的权限已被授权。
关于权限的封装后续补充。
相关文章推荐
- Android 6.0 动态权限申请注意事项
- Android 6.0 动态权限申请注意事项
- android 6.0权限动态申请
- android 6.0 运行时权限申请流程
- Android 6.0以上 需要运行时申请的权限(一)
- Android-版本6.0权限申请AndPermission第三方开源库
- Android 6.0动态权限申请
- Android 6.0 动态权限申请
- Android 6.0 动态权限申请
- Android权限详解(含6.0动态申请)
- Android 6.0(API 23)之后需动态申请权限的问题
- 【Android】6.0 运行时权限申请
- Android 6.0运行时权限解析与申请
- Android 6.0动态权限申请教程
- Android 6.0运行时权限申请和一些坑
- android 6.0运行时新权限的申请(转载)
- Android 6.0 权限申请方式
- Android 6.0 权限申请
- Android 6.0 动态权限申请管理 用户拒绝不再提示后再申请
- Android 6.0权限申请明细