转载自:https://blog.youkuaiyun.com/xietansheng/article/details/54315674 详细内容请至原作者,此为在自己项目中的简单使用,做记录用
1 加载布局前进行动态权限申请,先判断sdk版本 大于23 则进行动态权限申请
if (android.os.Build.VERSION.SDK_INT >= 23){
checkPermissions();
}
2 判断权限是否全部被授权,是:展示界面;否:提示用用进行授权
3 请求权限
private void checkPermissions() {
//需要申请的权限
String[] permissions = new String[]{
READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE,RECORD_AUDIO
};
//判断权限是否全部被授权
// 是:跳出方法
// 否:提示用户授权
boolean isAllGranted = isPermissionsAllGranted(permissions);
if(isAllGranted){
return;
}
//请求权限
ActivityCompat.requestPermissions(this,permissions,MY_PERMISSION_REQUEST_CODE);
}
private boolean isPermissionsAllGranted(String[] permissons) {
for (String permission:permissons) {
if (ContextCompat.checkSelfPermission(this,permission) != PackageManager.PERMISSION_GRANTED){
return false;
}
}
return true;
}
4 在权限回调中进行判断是否权限全部被授权,如果拒绝授权,提示用户跳转到手机设置页面,取消则退出.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_PERMISSION_REQUEST_CODE){
boolean isGrantedAll= true;
for (int i :grantResults){
if (i==PackageManager.PERMISSION_DENIED){
isGrantedAll = false;
break;
}
}
if (!isGrantedAll){
// 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
openAppDetails("应用需要访问 “录音” 和 “外部存储器”,请到 “应用信息 -> 权限” 中授予!");
}else {
finish();
}
}
}
/**
* 打开 APP 的详情设置
*/
private void openAppDetails(String msg) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg);
builder.setPositiveButton("去手动授权", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(intent);
}
});
builder.setNegativeButton("取消", null);
builder.show();
}