marshmallow:java.lang.illegalargumentexception:mediaFileUri必须是File Uri

时间:2016-03-10 10:34:56

标签: android android-camera android-6.0-marshmallow android-camera-intent illegalargumentexception

我在棉花糖设备中遇到问题,同时在通过相机捕捉照片后裁剪照片。 它适用于6个以下版本的设备。 这是我的代码:

if (requestCode == CAMERA_PICTURE) {

                Intent cropIntent = new Intent("com.android.camera.action.CROP");
                // set data type to be sent , indicate image type and Uri of image
                cropIntent.setDataAndType(mCapturedImageURI, "image/*");
                List<ResolveInfo> list = getPackageManager().queryIntentActivities( cropIntent, 0 );
                int size = list.size();
                // handle the case if there's no cropper in the phone
                if (size == 0) {
                    Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();
                    return;
                } else {

                   //set crop properties
                    cropIntent.putExtra("crop", "true");
                    //indicate aspect of desired crop
                    cropIntent.putExtra("aspectX", 1);
                    cropIntent.putExtra("aspectY", 1);
                    //indicate output X and Y
                    cropIntent.putExtra("outputX", 256);
                    cropIntent.putExtra("outputY", 256);

                    String fileName = Ut.getDateTimeStamp();
                    ContentValues values = new ContentValues();
                    values.put(MediaStore.Images.Media.TITLE, fileName);

                    mCropImageURI = getContentResolver()
                            .insert(
                                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                    values);

                    cropIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            mCropImageURI);

                    //retrieve data on return
                    cropIntent.putExtra("return-data", true);
                    //start the activity - we handle returning in onActivityResult
                    startActivityForResult(cropIntent, CROP_PICTURE);

                    return;
                }
            } else if (requestCode == CROP_PICTURE) {
                 getCameraPhotoFromIntent(data);
                setImagePathToSource();
            }

2 个答案:

答案 0 :(得分:1)

试试这个:

    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.MARSHMALLOW) {
         cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCropImageURI);
    }

答案 1 :(得分:0)

我已经自行解决了

cropIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            mCropImageURI);

因为nexus 9使用照片而不是画廊和&#34;照片&#34; app不允许使用媒体URI。 因此,通过删除它,我可以裁剪图像。

谢谢。