在拍照,读取相册信息时应该加入权限判断,不然在没有相应权限时会直接出错的. 相关代码以下:android
//判断是否有读写手机存储的权限 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 { //容许时应该进行的操做 } } }
同理拍照的权限判断也是同样的ide
//判断是否有拍照的权限 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 { //若是权限容许应当进行的下一步操做 }