Potete accedere alle foto di Immagini applicazione nel mio app Android
-
23-08-2019 - |
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.
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);
}