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ählesdcardWenn 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>

Antworten auf die Frage(5)

Ihre Antwort auf die Frage