/* 这里涉及到一个API,ContextCompat.checkSelfPermission,主要用于检测某个权限是否已经被授予,
方法返回值为PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED。
当返回DENIED就需要进行申请授权了。*/
/* 申请授权
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
该方法是异步的,第一个参数是Context;第二个参数是需要申请的权限的字符串数组;
第三个参数为requestCode,主要用于回调的时候检测。可以从方法名requestPermissions以及第二个参数看出,
是支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。*/
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PermissionChecker.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},RQUESTCODE);
}
}
/* 处理权限申请回调*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==RQUESTCODE){
if(grantResults[0]==PermissionChecker.PERMISSION_GRANTED){
//权限申请授权成功
}
}
方法返回值为PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED。
当返回DENIED就需要进行申请授权了。*/
/* 申请授权
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
该方法是异步的,第一个参数是Context;第二个参数是需要申请的权限的字符串数组;
第三个参数为requestCode,主要用于回调的时候检测。可以从方法名requestPermissions以及第二个参数看出,
是支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。*/
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PermissionChecker.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},RQUESTCODE);
}
}
/* 处理权限申请回调*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==RQUESTCODE){
if(grantResults[0]==PermissionChecker.PERMISSION_GRANTED){
//权限申请授权成功
}
}
}
/*
权限校验
*/
public static void checkPermission(Activity activity){
if(Build.VERSION.SDK_INT>=23){
int readPhone=activity.checkSelfPermission(Manifest.permission.READ_PHONE_STATE);
int receiveSms = activity.checkSelfPermission(Manifest.permission.RECEIVE_SMS);
int readSms = activity.checkSelfPermission(Manifest.permission.READ_SMS);
int readContacts = activity.checkSelfPermission(Manifest.permission.READ_CONTACTS);
int readSdcard = activity.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
int requestCode = 0;
ArrayList<String> permissions = new ArrayList<>();
if(readPhone != PackageManager.PERMISSION_GRANTED){
requestCode |= 1<<0;
permissions.add(Manifest.permission.READ_PHONE_STATE);
}
if(receiveSms != PackageManager.PERMISSION_GRANTED){
requestCode |= 1<<1;
permissions.add(Manifest.permission.RECEIVE_SMS);
}
if(readSms != PackageManager.PERMISSION_GRANTED){
requestCode |= 1<<2;
permissions.add(Manifest.permission.READ_SMS);
}
if(readContacts != PackageManager.PERMISSION_GRANTED){
requestCode |= 1<<3;
permissions.add(Manifest.permission.READ_CONTACTS);
}
if(readSdcard != PackageManager.PERMISSION_GRANTED){
requestCode |= 1<<4;
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if(requestCode>0){
String[] permission = new String[permissions.size()];
activity.requestPermissions(permissions.toArray(permission),requestCode);
return;
}
}