Android - сборщик изображений, неправильное изображение
Я начинаю запрос на выбор изображения:
<code>Intent intent = new Intent(); intent.setType( "image/*" ); intent.setAction( Intent.ACTION_GET_CONTENT ); startActivityForResult( Intent.createChooser( intent, "Choose"), PHOTO_GALLERY ); </code>
И вернуть данные обратно вonActivityResult
:
<code>if( resultCode == Activity.RESULT_OK && requestCode == PHOTO_GALLERY ) { U.log( data.getData() ); Bitmap bm = ... // built from the getData() Uri this.postImagePreview.setImageBitmap( bm ); } </code>
Когда я запускаю Intent, я вижу некоторые папки, такие какsdcard
, Drop Box
, MyCameraApp
, и так далее.
Если бы я выбрал картину изsdcard
, когда я загружаю предварительный просмотр, это совершенно неправильное изображение. Другие папки, похоже, не дают мне этой проблемы.
Кто-нибудь знает, почему он позволил мне выбрать одно изображение, а затем дать мне Uri для другого?
EDIT: Вот некоторые примеры зарегистрированныхgetData()
s:
Хорошо:
content://com.google.android.gallery3d.provider/picasa/item/5668377679792530210
Плохой:
content://media/external/images/media/28
EDIT: У меня все еще возникают проблемы при выборе из папки sdcard галереи.
Вот немного больше того, что я делаю в onActivityResult:
<code>// 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 ); </code>
Они все еще устанавливают неправильное изображение. Если я захожу в Галерею, долго нажимаю на изображение и просматриваю его детали, которые я получаю:
<code>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 </code>
Итак, Галерея говорит мне, что путь такой же, как и у пика, и Галерея корректно отображает его. Так почему же он не рендерится, если я установил его из onActivityResult?
Кроме того, это код, который я сейчас использую для запуска Intent:
<code>private void selectPhoto() { Intent intent = new Intent( Intent.ACTION_GET_CONTENT ); intent.setType( "image/*" ); ( ( Activity )mContext ).startActivityForResult( Intent.createChooser( intent, "Select Picture" ), PHOTO_GALLERY ); } </code>