从Android 6.0(API level 23)开始,应用程序需要在运行时请求访问敏感权限,这些权限被称为动态权限。因此,从API level 23开始,您需要在代码中请求动态权限。在API level 22及以下版本中,您可以在应用程序安装时请求权限。因此,如果您的应用程序的最低支持版本为API level 23或更高版本,则需要在代码中请求动态权限。
- 所需的所有权限信息
private static final int ACTION_REQUEST_PERMISSIONS = 0x001;
/**
* 所需的所有权限信息
*/
private static final String[] NEEDED_PERMISSIONS = new String[]{
Manifest.permission.WRITE_SETTINGS,//写入设置
Manifest.permission.WRITE_EXTERNAL_STORAGE,//写入外部存储
Manifest.permission.READ_EXTERNAL_STORAGE,//读取外部存储
Manifest.permission.CAMERA,//相机
Manifest.permission.READ_PHONE_STATE//阅读电话状态
};
- 方法
/**
* 权限检查
* @param neededPermissions 需要的权限
* @return 是否全部被允许
*/
protected boolean checkPermissions(String[] neededPermissions) {
if (neededPermissions == null || neededPermissions.length == 0) {
return true;
}
boolean allGranted = true;
for (String neededPermission : neededPermissions) {
allGranted &= ContextCompat.checkSelfPermission(this, neededPermission) == PackageManager.PERMISSION_GRANTED;
}
return allGranted;
}
- 验证
if (!checkPermissions(NEEDED_PERMISSIONS)) {
ActivityCompat.requestPermissions(this, NEEDED_PERMISSIONS,
ACTION_REQUEST_PERMISSIONS);
}
- 权限返回的结果,成功授权还是失败的处理
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case ACTION_REQUEST_PERMISSIONS: {
// 如果请求被取消,结果数组将为空
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 授权成功,执行相关操作
} else {
// 授权失败,禁用相关功能或显示提示信息
}
return;
}
// 处理其他权限请求
}
}