web-dev-qa-db-fra.com

Android: permet à l'utilisateur de sélectionner une image ou une vidéo dans Galerie

Est-il possible de démarrer Gallery de manière à afficher les images et les vidéos?

Merci

32
Asahi

Choisir le fichier audio de la galerie:

//Use MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);

Choisissez le fichier vidéo de la galerie:

//Use MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);

Choisissez une image de la galerie:

//Use  MediaStore.Images.Media.EXTERNAL_CONTENT_URI
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

Choisissez des fichiers multimédias ou des images:

 Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/* video/*");
45
Elenasys

Vous démarrez la galerie en tant que telle:

Intent pickIntent = new Intent(Intent.ACTION_PICK, Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.setType("image/* video/*");
startActivityForResult(pickIntent, IMAGE_PICKER_SELECT);

alors dans votre onActivityResult vous pouvez vérifier si la vidéo ou l'image a été sélectionnée en procédant comme suit:

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == RESULT_OK) {
    Uri selectedMediaUri = data.getData();
    if (selectedMediaUri.toString().contains("image")) {
        //handle image
    } else  if (selectedMediaUri.toString().contains("video")) {
        //handle video
    }
}
37
Siavash

(EDIT: Je ne l'utilise plus, nous sommes retournés aux deux choix "pick image" et "pick vidéo". Le problème était avec un téléphone Sony. Donc, ce n'est pas une solution à 100% ci-dessous, soyez prudent! )

C'est ce que j'utilise:

if (Build.VERSION.SDK_INT < 19) {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/* video/*");
    startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_picture)), SELECT_GALLERY);
} else {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});
    startActivityForResult(intent, SELECT_GALLERY_KitKat);
}

La clé ici est intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});

19
Fen1kz
intent.setType("*/*");

Ceci présente le dialogue avec l'utilisateur mais fonctionne au moins sur ICS. Je n'ai pas testé sur d'autres plateformes.

8
Maurycy

Lorsque vous devez déterminer quel type de contenu a été renvoyé, vous pouvez le faire à l'aide du résolveur de contenu pour obtenir le type MIME du contenu renvoyé:

if( data != null) {
    Uri selectedUri = data.getData();   
    String[] columns = { MediaStore.Images.Media.DATA,
                         MediaStore.Images.Media.MIME_TYPE };

    Cursor cursor = getContentResolver().query(selectedUri, columns, null, null, null);
    cursor.moveToFirst();

    int pathColumnIndex     = cursor.getColumnIndex( columns[0] );
    int mimeTypeColumnIndex = cursor.getColumnIndex( columns[1] );

    String contentPath = cursor.getString(pathColumnIndex);
    String mimeType    = cursor.getString(mimeTypeColumnIndex);
    cursor.close();

    if(mimeType.startsWith("image")) {
          //It's an image
    }
    else if(mimeType.startsWith("video")) {
         //It's a video
    }       
}
else {
    // show error or do nothing
}
5
Pit0r

CoolIris qui est venu avec mon onglet galaxie peut le faire. Cependant, le cooliris sur mon Acer ne touchera pas: S Sur mon jalon, vous ne pouvez pas démarrer la galerie avec une intention de sélection sur l’URL de la vidéo. une URL de vidéo aussi.

1
arnodenhond

Vous devez utiliser les éléments suivants comme choix

Intent photoLibraryIntent = new Intent(Intent.ACTION_PICK, Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoLibraryIntent.setType("image/* video/*");
0
KILA