requestCode 和 requestPermissions可以做一个对应 如:
public static final int CODE_RECORD_AUDIO = 0;
final int CODE_READ_PHONE_STATE = 1;
final int CODE_CAMERA = 2;
public static final String PERMISSION_RECORD_AUDIO=Manifest.permission.RECORD_AUDIO;
public static final String PERMISSION_READ_PHONE_STATE=Manifest.permission.READ_PHONE_STATE;
public static final String PERMISSION_CAMERA = Manifest.permission.CAMERA;
public static final List<String> requestPermissions = Arrays.asList(
PERMISSION_RECORD_AUDIO,
PERMISSION_READ_PHONE_STATE,
PERMISSION_CAMERA,);
public static final String[] permissionWords = {
"录音权限",
"读取手机状态权限",
"相机权限"
};
这样做的好处是
1.外部调用不用再查具体权限字段是什么,直接凭感觉找到code
2.此requestCode将来可用做requestPermissions:
//申请权限
ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode);
//回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults != null && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//do something
}
}
在permissionUtils.java中申请权限逻辑
final String requestPermission = requestPermissions.get(requestCode);
int checkSelfPermission;
try {
checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission);
} catch (RuntimeException e) {
Toast.makeText(activity, "请在设置中打开" + permissionWords[requestCode], Toast.LENGTH_SHORT)
.show();
Log.e(TAG, "RuntimeException:" + e.getMessage());
return;
}
if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) {
permissionGrant.onPermissionFailed(requestCode);
if (Build.VERSION.SDK_INT < 23) {
//打开自定义的弹框或设置中设置 openSettingActivity(activity, permissionWords[requestCode]);
return;
}
Log.i(TAG, "ActivityCompat.checkSelfPermission != PackageManager.PERMISSION_GRANTED");
ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode);
} else {
Log.d(TAG, "ActivityCompat.checkSelfPermission ==== PackageManager.PERMISSION_GRANTED");
permissionGrant.onPermissionGranted(requestCode);
}
设置权限的intent过滤:
Intent intent = new Intent();
intent.setAction(Settings.ACTION_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
activity.startActivity(intent);