//检查权限
public void checkPermission() {
int targetSdkVersion = 0;
String[] PermissionString={Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO,Manifest.permission.ACCESS_COARSE_LOCATION};
try {
final PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
targetSdkVersion = info.applicationInfo.targetSdkVersion;//获取应用的Target版本
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
// Log.e("err", "检查权限_err0");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//Build.VERSION.SDK_INT是获取当前手机版本 Build.VERSION_CODES.M为6.0系统
//如果系统>=6.0
if (targetSdkVersion >= Build.VERSION_CODES.M) {
//第 1 步: 检查是否有相应的权限
boolean isAllGranted = checkPermissionAllGranted(PermissionString);
if (isAllGranted) {
//Log.e("err","所有权限已经授权!");
return;
}
// 一次请求多个权限, 如果其他有权限是已经授予的将会自动忽略掉
ActivityCompat.requestPermissions(this,
PermissionString, 1);
}
}
}
/**
* 检查是否拥有指定的所有权限
*/
private boolean checkPermissionAllGranted(String[] permissionString) {
for (String permission : permissionString) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
// 只要有一个权限没有被授予, 则直接返回 false
//Log.e("err","权限"+permission+"没有授权");
return false;
}
}
return true;
}
/**
* 申请权限结果返回处理
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
boolean isAllGranted = true;
// 判断是否所有的权限都已经授予了
for (int grant : grantResults) {
if (grant != PackageManager.PERMISSION_GRANTED) {
isAllGranted = false;
break;
}
}
if (isAllGranted) {
// 所有的权限都授予了
Toast.makeText(this, "权限都授权了", Toast.LENGTH_SHORT).show();
Log.i("err","权限都授权了");
} else {
// 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
//容易判断错
//MyDialog("提示", "某些权限未开启,请手动开启", 1) ;
}
}
}
12-04