在拍照,读取相册信息时应该加入权限判断,否则在没有相应权限时会直接出错的. 相关代码如下:
//判断是否有读写手机存储的权限
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//权限还没有授予,需要在这里写申请权限的代码
/*
第二个参数是一个字符串数组,里面是你需要申请的权限。既然是一个数组,那么就说明你一次可以申请多个权限。
最后一个参数是一个整型常量,用于标志你这次申请的权限,该常量在onRequestPermissionsResult(…)方法中会用到。
*/
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Util.MY_PERMISSIONS_REQUEST_WRITE);
} else {
//如果有应该进行怎样的操作
}
然后在在onRequestPermissionsResult(…)方法中进行处理
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//判断是拍照的权限
if (requestCode == Util.MY_PERMISSIONS_REQUEST_CALL_PHOTO) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//当允许时进行的操作
} else {
//还是不允许时可以跳转到应用的权限管理界面修改权限
//跳转到该应用的设置界面,让用户手动授权
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
}
startActivity(localIntent);
}
}
//判断是读写手机存储的权限
if (requestCode == Util.MY_PERMISSIONS_REQUEST_WRITE) {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED)
{
//跳转到该应用的设置界面,让用户手动授权
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
}
startActivity(localIntent);
} else {
//允许时应该进行的操作
}
}
}
同理拍照的权限判断也是一样的
//判断是否有拍照的权限
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
//权限还没有授予,需要在这里写申请权限的代码
/*
第二个参数是一个字符串数组,里面是你需要申请的权限。既然是一个数组,那么就说明你一次可以申请多个权限。
最后一个参数是一个整型常量,用于标志你这次申请的权限,该常量在onRequestPermissionsResult(…)方法中会用到。
*/
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA}, Util.MY_PERMISSIONS_REQUEST_WRITE);
} else {
//如果权限允许应当进行的下一步操作
}