Android -Выбор изображения, неправильное изображение

Я запускаю запрос на выбор изображения:

Intent intent = new Intent();
intent.setType( "image/*" );
intent.setAction( Intent.ACTION_GET_CONTENT );
startActivityForResult( Intent.createChooser( intent, "Choose"), PHOTO_GALLERY );

И получаю данные обратно вonActivityResult:

if( resultCode == Activity.RESULT_OK && requestCode == PHOTO_GALLERY )
{
  U.log( data.getData() );
  Bitmap bm =... // built from the getData() Uri
  this.postImagePreview.setImageBitmap( bm );
}

Когда я запускаю Intent, я вижу какие-то папки, например как sdcard, Drop Box, MyCameraAppи так далее.

Если я выбрал изображение из sdcard, то при загрузке предварительного просмотра это совершенно неправильное изображение. Другие папки, похоже, не вызывают у меня этой проблемы.

Кто-нибудь знает, почему он позволяет мне выбрать одно изображение, а затем дает мне Uri для другого?

РЕДАКТИРОВАТЬ:Вот несколько примеров зарегистрированных getData()s:

Хорошо:

content://com.google.android.gallery3d.provider/picasa/item/5668377679792530210

Плохо:

content://media/external/images/media/28

РЕДАКТИРОВАТЬ:У меня все еще возникают проблемы при выборе из папки SD-карты галереи.

Вот еще немного расширения того, что я делаю в onActivityResult:

// cursor
Uri selectedImage = data.getData();

String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = mContext.getContentResolver().query( selectedImage, filePathColumn, null, null, null );
cursor.moveToFirst();

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

// Cursor: /mnt/sdcard/Pic.jpg : /mnt/sdcard/Pic.jpg
U.log( "Cursor: " + filePath + " : " + Uri.parse( filePath ) );

// "regular" 

// Regular: content://media/external/images/media/28 : content://media/external/images/media/28
U.log( "Regular: " + data.getDataString() + " : " + Uri.parse( data.getDataString() ) );

// Regular 2: content://media/external/images/media/28 : content://media/external/images/media/28
U.log( "Regular 2: " + data.getData() + " : " + data.getData() );


mPostImagePreview.setImageBitmap( BitmapFactory.decodeFile( filePath ) );
mPostImagePreview.setVisibility( View.VISIBLE );

Они по-прежнему устанавливают неправильное изображение. Если я захожу в Галерею, долго нажимаю на изображение и просматриваю его детали, я получаю:

TItle: Pic
Time: May 2, 2012
Width: 720
Height: 1280
Orientation: 0
File size: 757KB
Maker: Abso Camera
Model: Inspire 4G
Path: /mnt/sdcard/Pic.jpg

Итак, Галерея сообщает мне, что путь совпадает с действием выбора, и Галерея отображает его правильно. Так почему же он не отображается, если я установил его из onActivityResult?

Кроме того, это код, который я сейчас использую для запуска Intent:

private void selectPhoto()
{
  Intent intent = new Intent( Intent.ACTION_GET_CONTENT );
  intent.setType( "image/*" );
  ( ( Activity )mContext ).startActivityForResult( Intent.createChooser( intent, "Select Picture" ), PHOTO_GALLERY );
}
14
задан Josh 17 May 2012 в 18:34
поделиться