Android - Image Picker, Falsches Bild
Ich starte eine Anfrage für eine Bildauswahl:
<code>Intent intent = new Intent(); intent.setType( "image/*" ); intent.setAction( Intent.ACTION_GET_CONTENT ); startActivityForResult( Intent.createChooser( intent, "Choose"), PHOTO_GALLERY ); </code>
Und die Daten wieder herausholenonActivityResult
:
<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>
Wenn ich den Intent starte, werden einige Ordner angezeigt, zsdcard
, Drop Box
, MyCameraApp
, und so weiter.
Wenn ich ein Bild von wählesdcard
Wenn ich die Vorschau lade, ist es das völlig falsche Bild. Die anderen Ordner scheinen mir dieses Problem nicht zu geben.
Weiß jemand, warum ich ein Bild auswählen und mir dann den Uri für ein anderes geben sollte?
BEARBEITEN: Hier sind einige Beispiele protokolliertgetData()
s:
Gut:
content://com.google.android.gallery3d.provider/picasa/item/5668377679792530210
Schlecht:
content://media/external/images/media/28
BEARBEITEN: Ich habe immer noch Probleme beim Auswählen aus dem SD-Karten-Ordner der Galerie.
Hier ist ein bisschen mehr Erweiterung dessen, was ich in onActivityResult mache:
<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>
Sie haben immer noch das falsche Bild eingestellt. Wenn ich in die Galerie gehe, drücke lange auf das Bild und sehe die Details, die ich erhalte:
<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>
Die Galerie teilt mir mit, dass der Pfad dem der Auswahlaktion entspricht, und die Galerie gibt ihn korrekt wieder. Warum um alles in der Welt wird nicht gerendert, wenn ich es über onActivityResult festgelegt habe?
Dies ist auch der Code, mit dem ich den Intent jetzt auslöse:
<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>