Accédez aux photos de l'application photos dans mon application Android
-
23-08-2019 - |
Question
Tout comme l'iPhone a un UIImagePickerController de laisser les images d'accès utilisateur stockées sur l'appareil, ne nous avons un contrôle similaire dans le SDK Android?
Merci.
La solution
Vous pouvez usestartActivityForResult
, en passant dans une intention qui décrit une action que vous voulez et terminé et source de données pour effectuer l'action.
Heureusement pour vous, Android comprend une action pour la cueillette des choses: Intent.ACTION__PICK
et images contenant une source de données:
android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
pour des images sur le dispositif local ou
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
des images sur la carte SD.
Appel startActivityForResult
passe 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);
surchargent Ensuite onActivityResult
pour écouter l'utilisateur ayant fait une sélection.
@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
}
}
Une fois que vous avez l'image d'Uri, vous pouvez l'utiliser pour accéder à l'image et faire tout ce que vous devez faire.
Autres conseils
Vous pouvez également faire:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);
choisira des images dans toutes les mémoires.
Juste une mise à jour à 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);
}