2009-02-15 7 views
41

Tout comme l'iPhone a un UIImagePickerController pour permettre à l'utilisateur d'accéder aux images stockées sur l'appareil, avons-nous un contrôle similaire dans le SDK Android?Accéder aux photos depuis l'application Photos de mon application Android

Merci.

+1

Je crois que ce que vous êtes après est un fournisseur de contenu appelé android.provider et une classe appelée MediaStore.Images [Plus d'informations peuvent être trouvées ici.] (Http://developer.android.com/reference/android/provider/package-summary.html) – GregD

Répondre

83

Vous pouvez utiliser startActivityForResult, en transmettant un Intent qui décrit une action que vous souhaitez terminer et une source de données sur laquelle exécuter l'action.

Heureusement pour vous, Android comprend une action pour les choses de cueillette: Intent.ACTION__PICK et images contenant une source de données: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI pour les images sur le dispositif local ou android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI pour les images sur la carte SD.

Appel startActivityForResult passant dans l'action de sélection et les images que vous souhaitez que l'utilisateur pour sélectionner comme ceci:

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

outrepasser ensuite onActivityResult pour écouter l'utilisateur ayant fait une sélection. Une fois que vous avez l'image Uri, vous pouvez l'utiliser pour accéder à l'image et faire tout ce que vous devez faire avec.

+0

Mon onactivityresult ne s'appelle pas en utilisant ceci ... aucune suggestion? J'ai défini l'autorisation de stockage externe –

+0

Pour voir exactement comment vous récupérez le chemin du fichier à partir de la variable selectedImage, consultez cette réponse: http://stackoverflow.com/a/10474167 – Tiago

22

Vous pouvez également faire:

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

Cela ramasser des images dans toutes les mémoires.

+0

Est-il possible de faire apparaître la caméra comme une source supplémentaire? ici? – jjxtra

+0

Si vous transmettez le static 1 à startActivityForResult, comment identifiez-vous le code de requête dans onActivityResult()? –

1

Juste une mise à jour de la réponse donnée par Reto. Vous pouvez le faire à l'échelle de l'image:

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); 
}