0

Я пытаюсь выбрать изображение из галереи на Android Lollipop и показать его на дисплее. Я использую следующий код, чтобы перейти в галерею и выбрать изображение:Изображение не отображается на Android Lollipop

Intent galleryIntent = new Intent(
       Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
// Start the Intent 
startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 

Я использую следующий код, чтобы выбрать изображение и отобразить его:

Uri selectedImage = data.getData(); 
String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

// Get the cursor 
Cursor cursor = getContentResolver().query(selectedImage, 
     filePathColumn, null, null, null); 
// Move to first row 
cursor.moveToFirst(); 

int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
imgDecodableString = cursor.getString(columnIndex); 
cursor.close(); 

// Set the Image in ImageView after decoding the String 
ImageViewFinal.setImageBitmap(BitmapFactory 
     .decodeFile(imgDecodableString)); 

Как-то не отображается выбранное изображение , Он отлично работает на более низких версиях Android, но не работает на Lollipop. Logcat также не показывает никаких ошибок, это означает, что изображение на самом деле выбирается, но по какой-то причине оно скрывается за серым экраном.

+0

Можете ли вы опубликовать два Uris, которые вы получаете из 'data.getData()'; один, когда он загружается правильно и в противном случае. – JanithaR

+0

Спасибо за быстрый ответ Janitha. selectedImage это uri, и он отлично работает в KitKat, но не работает на леденец. –

+0

Вас попросили указать значения uri.getPath(). – greenapps

ответ

0

Я нашел решение, которое сработало для меня. Вот оно,

Uri selectedImageUri = data.getData(); 
    String[] projection = { MediaColumns.DATA }; 
    Cursor cursor = managedQuery(selectedImageUri, projection, null, null, 
      null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
    cursor.moveToFirst(); 

    String selectedImagePath = cursor.getString(column_index); 

    Bitmap bm; 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(selectedImagePath, options); 
    final int REQUIRED_SIZE = 200; 
    int scale = 1; 
    while (options.outWidth/scale/2 >= REQUIRED_SIZE 
      && options.outHeight/scale/2 >= REQUIRED_SIZE) 
     scale *= 2; 
    options.inSampleSize = scale; 
    options.inJustDecodeBounds = false; 
    bm = BitmapFactory.decodeFile(selectedImagePath, options); 

    ImageViewFinal.setImageBitmap(bm); 

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

+0

Вы забыли рассказать, в чем проблема на самом деле. И почему вы адаптировали код таким образом. – greenapps

+0

@greenapps мой предыдущий код не работал в lollipop, поэтому я пробовал код и работал во всех версиях Android. –

+0

Мой бог. Это не работает. Но почему это не сработало? В чем причина? Вы должны сказать, почему это не сработало. И как вы его решили. – greenapps

Смежные вопросы