1. 程式人生 > >android 7.0 相機,拍照 調裁切提示 “無法載入此圖片” 解決方案

android 7.0 相機,拍照 調裁切提示 “無法載入此圖片” 解決方案

調起相機拍照之後,在調起裁切之前  加上 這兩句程式碼,,

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");

//需要加上這兩句話  : uri 許可權
 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

 intent.putExtra("crop", "true");
intent
.putExtra("aspectX", 400); intent.putExtra("aspectY", 400); intent.putExtra("output", Uri.fromFile(loadingFile));// 輸出到檔案 intent.putExtra("outputFormat", "PNG");// 返回格式 intent.putExtra("noFaceDetection", true); // 去除面部檢測 intent.putExtra("return-data", false); // 不要通過Intent傳遞截獲的圖片 startActivityForResult(intent,
AVATAR_ZOOM);

方法程式碼:路徑 資料夾的  內容有刪減,,謝謝,

 private void choosePicture() {
final Dialog dialog = new Dialog(getActivity(), R.style.dialog);
View contentView = getActivity().getLayoutInflater().inflate(R.layout.user_photo_dialog, null);
dialog.setContentView(contentView);
android.view.ViewGroup.LayoutParams 
cursorParams = contentView.getLayoutParams(); cursorParams.width = getResources().getDisplayMetrics().widthPixels; contentView.setLayoutParams(cursorParams); dialog.getWindow().setWindowAnimations(R.style.dialogWindowAnim); // 設定視窗彈出動畫 dialog.show(); TextView album = (TextView) dialog.findViewById(R.id.avatar_album); TextView photograph = (TextView) dialog.findViewById(R.id.avatar_photograph); TextView cancel = (TextView) dialog.findViewById(R.id.avatar_cancel); //從相簿選擇上傳 album.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); Intent picture = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(picture, AVATAR_ALBUM); } }); //拍照上傳 photograph.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); if (mPhotographFile == null) { mPhotographFile = new File(AppStoragePath.getCachePath() + "/img/"); if (!mPhotographFile.exists()) { mPhotographFile.mkdirs(); } } mPhotographPath = mPhotographFile + "/" + UserAppConst.imageName(); mEditor.putString(UserAppConst.PHOTO_PATH, mPhotographPath); mEditor.commit(); File file = new File(mPhotographPath); // Uri imageuri = Uri.fromFile(file); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, getUriForFile(getActivity(), file)); intent.putExtra("return-data", false); startActivityForResult(intent, AVATAR_PHOTOGRAPH); } }); //取消 cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if (requestCode == AVATAR_PHOTOGRAPH) { mPhotographPath = mShared.getString(UserAppConst.PHOTO_PATH, null); if (mPhotographPath != null) { File files = new File(mPhotographPath); if (files.exists()) { mImagePath = mPhotographPath;mImagePath = startPhotoZoom(getUriForFile(getActivity(), files)); } } } else if (requestCode == AVATAR_ALBUM) { Uri selectedImage = data.getData(); mImagePath = startPhotoZoom(selectedImage); } else if (requestCode == AVATAR_ZOOM) { if (mImagePath != null && mImagePath.length() > 0) { mImagePath = ImageUtil.zoomImage(mImagePath, 400); Bitmap bitmap = BitmapFactory.decodeFile(mImagePath);mPhoto.setImageBitmap(ImageLoaderUtils.getInstance().toRoundBitmap(bitmap)); ToastUtil.toastShow(getActivity(), getString(R.string.modify_avatar_succeed)); } } } } private String startPhotoZoom(Uri uri) { try { File loadingFile = new File(filePath);Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 400); intent.putExtra("aspectY", 400); intent.putExtra("output", Uri.fromFile(loadingFile));// 輸出到檔案 intent.putExtra("outputFormat", "PNG");// 返回格式 intent.putExtra("noFaceDetection", true); // 去除面部檢測 intent.putExtra("return-data", false); // 不要通過Intent傳遞截獲的圖片 startActivityForResult(intent, AVATAR_ZOOM); return filePath; } catch (Exception e) { Log.i("SNN", "startPhotoZoom: e " + e.toString()); } return null; }
public static Uri getUriForFile(Context context, File file) {
if (context == null || file == null) {
throw new NullPointerException();
}
Uri uri;
    if (Build.VERSION.SDK_INT >= 24) {
uri = FileProvider.getUriForFile(context.getApplicationContext(), "
(你的packagename +).fileprovider", file);
} else {uri = Uri.fromFile(file);}return uri;}