web-dev-qa-db-fra.com

Ouvrir l'application de la galerie depuis Android Intent

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

21
Dfranc3373

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);
19
Umitk

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);
    }
30
Bebin T.N

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+

9
Milan
  1. La suite peut être utilisée dans Activité ou Fragment.

     private File mCurrentPhoto;
    
  2. Ajouter des autorisations

    <uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"  />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" Android:maxSdkVersion="18" />
    
  3. 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);
        }
    }
    }
    
  4. 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);
    }
    
5
TeeTracker

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);
4
Nizam

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.

0
Mohit Garg