sto iniziando una richiesta di prelievo immagine:Android - Immagine Picker, immagine sbagliata
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Choose"), PHOTO_GALLERY);
E ottenere i dati indietro nel onActivityResult
:
if(resultCode == Activity.RESULT_OK && requestCode == PHOTO_GALLERY)
{
U.log(data.getData());
Bitmap bm = ... // built from the getData() Uri
this.postImagePreview.setImageBitmap(bm);
}
Quando lancio l'Intent, ho vedere alcune cartelle, ad esempio sdcard
, Drop Box
, MyCameraApp
e così via.
Se ho scelto un'immagine da sdcard
, quando carico l'anteprima, è l'immagine completamente sbagliata. Le altre cartelle non sembrano darmi questo problema.
Qualcuno sa perché mi ha permesso di scegliere un'immagine, poi mi ha dato l'Uri per un altro?
EDIT: Ecco alcuni exampled registrati getData()
s:
Buone:
content://com.google.android.gallery3d.provider/picasa/item/5668377679792530210
Bad:
content://media/external/images/media/28
EDIT: Sono sti Avremo problemi durante il prelievo dalla cartella sdcard della galleria.
Qui è un po 'più di espansione di quello che sto facendo in 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);
Hanno ancora impostare l'immagine sbagliata. Se vado in Galleria, premere a lungo l'immagine e visualizzarne i dettagli ottengo:
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
Così, la Galleria mi sta dicendo il percorso è lo stesso come l'azione di ritiro, e la galleria è il rendering in modo corretto . Quindi, perché non è rendering se lo imposto da onActivityResult?
Inoltre, questo è il codice che sto usando per sparare l'Intent ora:
private void selectPhoto()
{
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
((Activity)mContext).startActivityForResult(Intent.createChooser(intent, "Select Picture"), PHOTO_GALLERY);
}
È questo comportamento casuale? Voglio dire, c'è qualche motivo che vedi quando ripeti la selezione dell'immagine ...? – Ronnie
forse le miniature nella galleria sono sbagliate. questo può accadere se ad esempio le immagini vengono cancellate perché Android riutilizza gli ID immagine. – uwe
@ userSeven7s: sempre quando seleziono dalla cartella sdcard dell'app Gallery. – Josh