首先,我正在使用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是文件的路径。图像裁剪器本身负载很好并且有效。但是当我点击保存时,我在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然后在调用intent之前检索它?或者是否有一个我错过的明显解决方案?
干杯 汤姆
答案 0 :(得分:3)
好吧,看来我真的错过了一些东西,扩展了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);
我觉得这可能有点矫枉过正,如果有的话随意发表评论。但至少它解决了这个问题。