其他分享
首页 > 其他分享> > Android Image Crop Uri异常

Android Image Crop Uri异常

作者:互联网

首先,我正在使用Xamarin,但是问题在本地Java项目上也相同.
我将SDK更新到5.1,之前在正常工作的代码上遇到了一个奇怪的错误.

  imageStream = "file://" + imageStream;

            Mvx.Trace("path: " + imageStream);

            img = imageStream;

            try {
                Intent cropIntent = new Intent("com.android.camera.action.CROP");
                // indicate image type and Uri
                var fileUri = Android.Net.Uri.Parse(imageStream);
                cropIntent.SetDataAndType(fileUri, "image/*");
                // set crop properties
                cropIntent.PutExtra("crop", "true");

                // indicate aspect of desired crop
                cropIntent.PutExtra("aspectX", 5);
                cropIntent.PutExtra("aspectY", 4);
                // indicate output X and Y
                cropIntent.PutExtra("outputX", 1000);
                cropIntent.PutExtra("outputY", 800);
                // retrieve data on return
                cropIntent.PutExtra("return-data", true);

                // start the activity - we handle returning in onActivityResult
                StartActivityForResult(cropIntent, PIC_CROP);
            }

imageStream ist到文件的路径.图像裁切器本身可以很好地工作.但是,当我点击保存时,我在logcat中得到以下异常:

E/AndroidRuntime( 5333): FATAL EXCEPTION: BackgroundTask #1
E/AndroidRuntime( 5333): Process: com.google.android.apps.photos, PID: 5333
E/AndroidRuntime( 5333): java.lang.IllegalArgumentException: mediaStoreUri must be a MediaStore Uri

我在MediaStore或MediaStore.Image命名空间中找不到与Android.Net.Uri.Parse类似的方法.这是否意味着我必须先将图像保存到MediaStore,然后在调用意图之前将其检索?还是有一个我根本错过的明显解决方案?

干杯
汤姆

解决方法:

好吧,看来我真的很想念这里的内容,扩展了uri检索的代码,以便首先将图像放入媒体存储中.

var file = new Java.IO.File(imageStream);
var bmp = BitmapFactory.DecodeFile(file.AbsolutePath);
img = MediaStore.Images.Media.InsertImage(ContentResolver, bmp, "" ,"");
var fileUri = Android.Net.Uri.Parse(img);

如果可以的话,我觉得这可能有点矫kill过正.但这至少可以解决问题.

标签:onactivityresult,xamarin,android-intent,android
来源: https://codeday.me/bug/20191119/2037215.html