2009-02-15 17 views
41

Proprio come l'iPhone ha un UIImagePickerController per consentire all'utente di accedere alle immagini memorizzate sul dispositivo, abbiamo un controllo simile nell'SDK di Android?Accedi alle immagini dall'app Immagini nella mia app Android

Grazie.

+1

Credo che quello che cercate è un fornitore di contenuti chiamato android.provider e una classe denominata MediaStore.Images [Maggiori informazioni si possono trovare qui.] (Http://developer.android.com/reference/android/provider/package-summary.html) – GregD

risposta

83

È possibile utilizzare startActivityForResult, inoltrare un oggetto che descrive un'azione che si desidera completare e l'origine dati su cui eseguire l'azione.

Fortunatamente per voi, Android include un azione per la raccolta cose: Intent.ACTION__PICK e una fonte di dati contenenti le immagini: 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 passaggio nell'azione di prelievo e le immagini che si desidera all'utente di selezionare da come questo:

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

poi sovrascrivere 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.

+0

Il mio onactivityresult non viene chiamato quando si utilizza questo ... qualche suggerimento? Ho impostato il permesso di archiviazione esterno –

+0

Per vedere esattamente come recuperare il percorso del file dalla variabile selectedImage, controlla questa risposta: http://stackoverflow.com/a/10474167 – Tiago

22

si può anche fare:

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

Ciò raccogliere immagini in tutti i depositi.

+0

E 'possibile far apparire la telecamera come fonte aggiuntiva Qui? – jjxtra

+0

se si passa lo statico 1 a startActivityForResult, come si identifica il codice di richiesta all'interno di onActivityResult()? –

1

Solo un aggiornamento della risposta fornita 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); 
} 
Problemi correlati