獲取請求:
/**
* 獲取用戶權限
*/
private void permissionRequest() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ) {
String[] permissions = new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE};
List<String> mPermissionList = new ArrayList<>();
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(SplashActivity.this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);
}
}
if (mPermissionList.isEmpty()) {// 全部允許
toMain(); //執行下一步操作
} else {//存在未允許的權限
String[] mPermissions = mPermissionList.toArray(new String[mPermissionList.size()]);
ActivityCompat.requestPermissions(SplashActivity.this, mPermissions, 1001);
}
}
}
用戶操作的響應
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1001:
for (int i = 0; i < grantResults.length; i++) {
// 如果拒絕獲取權限
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
//判斷是否勾選禁止後不再詢問
boolean flag= ActivityCompat.shouldShowRequestPermissionRationale(SplashActivity.this, permissions[i]);
if (flag) {
permissionRequest();
return;//用戶權限是一個一個的請求的,只要有拒絕,剩下的請求就可以停止,再次請求打開權限了
} else { // 勾選不再詢問,並拒絕
ToastUtils.showToast(SplashActivity.this, "Please go to Settings to get user permissions"));
return;
}
}
}
toMain(); //執行下一步操作
break;
default:
break;
}
}