Domanda

Proprio come l'iPhone ha un UIImagePickerController di lasciare le immagini di accesso degli utenti memorizzati sul dispositivo, abbiamo un controllo analogo nel SDK di Android?

Grazie.

È stato utile?

Soluzione

È possibile usestartActivityForResult, passando in un intento che descrive un'azione che si vuole completato ed e fonte di dati per eseguire l'azione.

Fortunatamente per voi, Android include un'azione per la raccolta di cose: Intent.ACTION__PICK e un'origine dati contenente le foto: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI per le immagini sul dispositivo locale o android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI per le immagini sulla scheda SD.

Chiamata startActivityForResult passando nell'azione di prelievo e le immagini che si desidera all'utente di selezionare da questo modo:

startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);

Poi ignorare onActivityResult ad ascoltare per l'utente aver fatto un elenco.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == SELECT_IMAGE)
    if (resultCode == Activity.RESULT_OK) {
      Uri selectedImage = data.getData();
      // TODO Do something with the select image URI
    } 
}

Una volta che avete l'immagine Uri è possibile utilizzarlo per accedere all'immagine e fare tutto ciò che devi fare con esso.

Altri suggerimenti

È anche possibile fare:

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);

In questo modo raccogliere le immagini in tutti i depositi.

Solo un aggiornamento per la risposta data da Reto. Si potrebbe fare questo per ridimensionare l'immagine:

private String getPath(Uri uri) {
String[]  data = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(context, uri, data, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top