yalantis ucrop studio library android android-intent xamarin onactivityresult

library - ucrop android studio



Android Image Crop Uri Exception (1)

primero, estoy usando Xamarin, pero el problema es el mismo en un proyecto nativo de Java. Estaba actualizando el SDK a 5.1 y encontré un extraño error en el código que funcionaba bien antes.

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 es la ruta del archivo. El recortador de imágenes se carga bien y funciona. Sin embargo, cuando presiono Guardar recibo la siguiente excepción en 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

No encontré un método similar al Android.Net.Uri.Parse en los espacios de nombres MediaStore o MediaStore.Image. ¿Significa esto que primero tendría que guardar la imagen en MediaStore y luego recuperarla antes de llamar al intento? ¿O hay una solución obvia que simplemente me perdí?

Saludos Tom


Ok, parece que realmente me perdí algo aquí, extendí el código para la recuperación de uri para poner primero la imagen en la tienda multimedia.

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

Siento que esto quizás sea excesivo, si es así, siéntete libre de comentar. Pero al menos resuelve el problema.