最近项目用到Android6.0动态权限问题,自己查了很多资料。网上说法也很多!自己也尝试了几种,例如:把SDK改正<23,利用第三方开源库PermissionsDispatcher等,但都觉得比较麻烦最后发现还是google自带的比较方便简单易懂。为了自己以后有资料可查,记录一下!
一,添加一种权限(以录音权限为例)
1,创建一个数组用于存放权限
PRivate static final int RESULT_CODE_STARTAUDIO = 1;//定义变量便于回调结果时处理
String[] perms ={"android.permission.RECORD_AUDIO"}
2,检查设备是否对该应用开发权限
if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(getapplicationContext(), perm)) {}else{ActivityCompat.requestPermissions(MainActivity.this,perms, RESULT_CODE_STARTAUDIO);}
3,就是权限添加后的回调方法
@Overridepublic void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(permsRequestCode, permissions, grantResults);switch(permsRequestCode){case RESULT_CODE_STARTAUDIO:boolean albumAccepted = grantResults[0]== PackageManager.PERMISSION_GRANTED;if(!albumAccepted){ToastUtils.show(getApplicationContext(),"请开启录音权限");}break;}}
二,添加多种权限。(添加多种权限就不多说了和添加一种权限相差不大就是数组遍历,就直接上代码了)
private static final int RESULT_CODE_STARTAUDIO = 1;String[] perms = {"android.permission.RECORD_AUDIO","android.permission.WRITE_EXTERNAL_STORAGE","android.permission.READ_EXTERNAL_STORAGE"};private static final int WRITE_EXTERNAL_STORAGE = 2;public void settingPermission() {String perm = null;for (int i = 0; i < perms.length; i++) {perm = perms[i];}if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(getApplicationContext(), perm)) {}else{ActivityCompat.requestPermissions(MainActivity.this,perms, RESULT_CODE_STARTAUDIO);}}@Overridepublic void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(permsRequestCode, permissions, grantResults);switch(permsRequestCode){case RESULT_CODE_STARTAUDIO:boolean albumAccepted = grantResults[0]== PackageManager.PERMISSION_GRANTED;if(!albumAccepted){ToastUtils.show(getApplicationContext(),"请开启录音权限");}break;case WRITE_EXTERNAL_STORAGE:boolean writeExternalStorage = grantResults[0]== PackageManager.PERMISSION_GRANTED;if(!writeExternalStorage){ToastUtils.show(getApplicationContext(),"请开启存储权限");}break;}}
另附需要添加的动态权限(为了应用权限兼容性建议在AndroidManifest.xml动态权限也配置一下下):
group:android.permission-group.CONTACTSpermission:android.permission.WRITE_CONTACTSpermission:android.permission.GET_ACCOUNTSpermission:android.permission.READ_CONTACTSgroup:android.permission-group.PHONEpermission:android.permission.READ_CALL_LOGpermission:android.permission.READ_PHONE_STATEpermission:android.permission.CALL_PHONEpermission:android.permission.WRITE_CALL_LOGpermission:android.permission.USE_Sippermission:android.permission.PROCESS_OUTGOING_CALLSpermission:com.android.voicemail.permission.ADD_VOICEMAILgroup:android.permission-group.CALENDARpermission:android.permission.READ_CALENDARpermission:android.permission.WRITE_CALENDARgroup:android.permission-group.CAMERApermission:android.permission.CAMERAgroup:android.permission-group.SENSORSpermission:android.permission.BODY_SENSORSgroup:android.permission-group.LOCATIONpermission:android.permission.access_FINE_LOCATIONpermission:android.permission.ACCESS_COARSE_LOCATIONgroup:android.permission-group.STORAGEpermission:android.permission.READ_EXTERNAL_STORAGEpermission:android.permission.WRITE_EXTERNAL_STORAGEgroup:android.permission-group.MICROPHONEpermission:android.permission.RECORD_AUDIOgroup:android.permission-group.SMSpermission:android.permission.READ_SMSpermission:android.permission.RECEIVE_WAP_PUSHpermission:android.permission.RECEIVE_MMSpermission:android.permission.RECEIVE_SMSpermission:android.permission.SEND_SMSpermission:android.permission.READ_CELL_BROADCASTS
新闻热点
疑难解答