Les autres réponses expliquaient comment envoyer l'intention, mais elles n'expliquaient pas bien comment traiter la réponse. Voici un exemple de code sur la façon de le faire :
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode) {
case REQ_CODE_PICK_IMAGE:
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(
selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
}
}
}
Après cela, vous avez l'image sélectionnée stockée dans "yourSelectedImage" pour faire ce que vous voulez avec. Ce code fonctionne en récupérant l'emplacement de l'image dans la base de données du ContentResolver, mais cela ne suffit pas. Chaque image comporte environ 18 colonnes d'informations, allant du chemin d'accès au fichier à la date de dernière modification, en passant par les coordonnées GPS du lieu où la photo a été prise, bien que de nombreux champs ne soient pas réellement utilisés.
Pour gagner du temps car vous n'avez pas réellement besoin des autres champs, la recherche de curseur se fait avec un filtre. Le filtre fonctionne en spécifiant le nom de la colonne que vous voulez, MediaStore.Images.Media.DATA, qui est le chemin, puis en donnant cette chaîne[] à la requête du curseur. La requête du curseur renvoie le chemin d'accès, mais vous ne savez pas dans quelle colonne il se trouve tant que vous n'utilisez pas la fonction columnIndex
code. Il récupère simplement le numéro de la colonne en fonction de son nom, le même que celui utilisé dans le processus de filtrage. Une fois que vous avez obtenu cela, vous êtes enfin en mesure de décoder l'image en un bitmap avec la dernière ligne de code que j'ai donné.