2015-10-16 2 views
3

сначала, я использую Xamarin, но проблема такая же на родном Java-проекте. Я обновлял SDK до 5.1 и сталкивался с странной ошибкой в ​​коде, который раньше работал нормально.Android Image Crop Uri Exception

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 

я не нашел подобный метод к Android.Net.Uri.Parse в пространствах имен Mediastore или MediaStore.Image. Означает ли это, что я должен сначала сохранить изображение в MediaStore, а затем извлечь его, прежде чем называть намерение? Или есть очевидное решение, которое я просто пропустил?

Приветствия Том

ответ

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

Я чувствую, что это может быть излишним, если да, не стесняйтесь комментировать. Но, по крайней мере, это решает проблему.

+0

У меня было то же исключение на Android 6. MediaStore.Images.Media.InsertImage исправляет урожай для меня! Спасибо за ваше сообщение! Хотя это странно ... Кажется, это ошибка в М. –