//如果当前版本大于等于Android 6.0,且该权限未被授予,则申请授权
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&&getActivity().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_
STORAGE)!= PackageManager.PERMISSION_GRANTED) {
//申请授权,第一个参数为要申请用户授权的权限;
// 第二个参数为requestCode 必须大于等于0,主要用于回调的时候检测,匹配特定的onRequestPermissionsResult。
//可以从方法名requestPermissions以及第二个参数看出,是支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。
ActivityCompat.requestPermissions((Activity) getActivity(),new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
【自制工具类】
/**
* @Author Lee
* @Time 2017/9/11
* @Theme 6.0(sdk23)以后申请动态权限 (静态授权 + 动态申请)
*/
public class DynamicPermissionsUtils {
/*(1) ContextCompat.checkSelfPermission,主要用于检测某个权限是否已经被授予,方法返回值为
PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED。当返回DENIED就需要进行申请授权了。*/
/* (2) ActivityCompat.requestPermissions,该方法是异步的,第一个参数是Context;
第二个参数是需要申请的权限的字符串数组;第三个参数为requestCode,主要用于回调的时候检测。
可以从方法名requestPermissions以及第二个参数看出,是支持一次性申请多个权限的,
系统会通过对话框逐一询问用户是否授权。*/
/**
*
* @param activity 上下文环境
* @param permissionList 需要动态申请的权限数组(支持一次性申请多个)
* @param requestCode 主要用于回调的时候检测
*/
// 读取手机通讯录
public static void getDynamicPermissions(Activity activity, String[] permissionList, int requestCode){
for(int i =0; i<permissionList.length; i++){
if (ContextCompat.checkSelfPermission(activity,permissionList[i])
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity,
permissionList,
requestCode);
}
}
}