在拍照,讀取相冊信息時應該加入權限判斷,不然在沒有相應權限時會直接出錯的. 相關代碼以下: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 { //若是權限容許應當進行的下一步操做 }