Je cherche un moyen d'ouvrir l'application Android
Gallery à partir d'une intention.
Je ne veux pas renvoyer d'image, mais simplement ouvrir la galerie pour permettre à l'utilisateur de l'utiliser comme s'ils l'avaient sélectionnée dans le lanceur (View pictures/folders
).
J'ai essayé de faire ce qui suit:
Intent intent = new Intent();
intent.setAction(Android.content.Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Cependant, cela provoque la fermeture de l'application lorsque je sélectionne une image (je sais que cela est dû au ACTION_GET_CONTENT
), mais je dois simplement ouvrir la galerie.
Toute aide est la bienvenue.
Merci
Voici ce dont vous avez besoin:
ACTION_VIEW
Changez votre code pour:
Intent intent = new Intent();
intent.setAction(Android.content.Intent.ACTION_VIEW);
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
J'espère que cela t'aidera. Ce code fonctionne pour moi.
Intent i = new Intent(Intent.ACTION_PICK,Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
ResultCode est utilisé pour mettre à jour l'image sélectionnée dans la vue Galerie
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
if (cursor == null || cursor.getCount() < 1) {
return; // no cursor or no record. DO YOUR ERROR HANDLING
}
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
if(columnIndex < 0) // no column index
return; // DO YOUR ERROR HANDLING
String picturePath = cursor.getString(columnIndex);
cursor.close(); // close cursor
photo = decodeFilePath(picturePath.toString());
List<Bitmap> bitmap = new ArrayList<Bitmap>();
bitmap.add(photo);
ImageAdapter imageAdapter = new ImageAdapter(
AddIncidentScreen.this, bitmap);
imageAdapter.notifyDataSetChanged();
newTagImage.setAdapter(imageAdapter);
}
Vous pouvez ouvrir la galerie en utilisant l’intention suivante:
public static final int RESULT_GALLERY = 0;
Intent galleryIntent = new Intent(
Intent.ACTION_PICK,
Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent , RESULT_GALLERY );
Si vous voulez obtenir l'URI du résultat ou faire autre chose, utilisez ceci:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case QuestionEntryView.RESULT_GALLERY :
if (null != data) {
imageUri = data.getData();
//Do whatever that you desire here. or leave this blank
}
break;
default:
break;
}
}
Testé sur Android 4.0+
La suite peut être utilisée dans Activité ou Fragment.
private File mCurrentPhoto;
Ajouter des autorisations
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" Android:maxSdkVersion="18" />
Ajouter les intentions d'ouvrir les champs "sélecteur d'image" et "capture de photo"
//A system-based view to select photos.
private void dispatchPhotoSelectionIntent() {
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
this.startActivityForResult(galleryIntent, REQUEST_IMAGE_SELECTOR);
}
//Open system camera application to capture a photo.
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(App.Instance.getPackageManager()) != null) {
try {
createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (mCurrentPhoto != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mCurrentPhoto));
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
Ajouter la manipulation lors de l'obtention d'une photo.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_IMAGE_SELECTOR:
if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = App.Instance.getContentResolver().query(data.getData(), filePathColumn, null, null, null);
if (cursor == null || cursor.getCount() < 1) {
mCurrentPhoto = null;
break;
}
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
if(columnIndex < 0) { // no column index
mCurrentPhoto = null;
break;
}
mCurrentPhoto = new File(cursor.getString(columnIndex));
cursor.close();
} else {
mCurrentPhoto = null;
}
break;
case REQUEST_IMAGE_CAPTURE:
if (resultCode != Activity.RESULT_OK) {
mCurrentPhoto = null;
}
break;
}
if (mCurrentPhoto != null) {
ImageView imageView = (ImageView) [parent].findViewById(R.id.loaded_iv);
Picasso.with(App.Instance).load(mCurrentPhoto).into(imageView);
}
super.onActivityResult(requestCode, resultCode, data);
}
Comme vous ne voulez pas qu'un résultat soit renvoyé, essayez de suivre un code simple.
Intent i=new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivity(i);
si quelqu'un continue à avoir l'erreur, même après avoir ajouté le code suivant
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
alors vous pourriez être en train d'ouvrir l'intention dans une autre classe (en appelant) à cause de cela l'application va se bloquer lorsque vous cliquez sur le bouton.
SOLUTION DU PROBLEME
Place l'intention dans le fichier de classe connecté au fichier de présentation du bouton. par exemple - activity_main.xml contient le bouton et il est connecté au fichier MainActivity.Java . mais en raison de la fragmentation, vous définissez l'intention dans une autre classe (disons Activity.Java), votre application se bloquera sauf si vous placez l'intention dans le fichier MainActivity.Java. Je recevais cette erreur et elle est résolue par ceci.