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;}



























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章