2013-04-07 5 views
5

In meinem Projekt möchte ich eine Galerie auf einen Klick öffnen und sollte in der Lage sein, Bild oder Video auszuwählen, um den Pfad von ihnen zu erhalten.android- Galerie öffnen und wählen Sie Bild und Video

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

startActivityForResult(i, RESULT_LOAD_IMAGE); 

Von oben Code bin ich in der Lage Galerie zu öffnen, aber in diesem Fall bin ich nur in der Lage Bild auszuwählen. Also, bitte hilf mir bei der Videoauswahl. Vielen Dank im Voraus.

Antwort

7

Im Folgenden Code mein Problem gelöst

final Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT); 
         galleryIntent.setType("*/*"); 
         startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE); 
+2

Dies ist eine schlechte Lösung, die nichts filtert, könnten Sie eine PDF-Datei wählen ... – desgraci

+1

In der Tat sollten Sie KILA Antwort stattdessen akzeptieren – akohout

14

können Sie den nächsten Schnipsel verwenden:

Intent mediaChooser = new Intent(Intent.ACTION_GET_CONTENT); 
//comma-separated MIME types 
mediaChooser.setType("video/*, image/*"); 
startActivityForResult(mediaChooser, RESULT_LOAD_IMAGE); 

Aber ich denke, dass es nur auf ICS arbeiten oder größer

+5

sollte "image/*" anstelle von "images/*" sein –

+6

auf 6.0 das erlaubt nur Videos zu wählen – Danedo

+0

Dies scheint zumindest für neuere Versionen von Android oder Google Fotos App gebrochen zu sein. Scheint, dass nur der erste Mime-Typ in einer durch Kommas getrennten Liste erkannt wird. – lostintranslation

2
Ihre Absicht, um diese Änderung

:

Intent i = new Intent(Intent.ACTION_PICK, 
android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI); 

Wenn Sie versuchen, Videos zu erhalten, müssen Sie im mediStore angeben, dass das Video in Ordnung ist und nicht die Bilder, die Sie geschrieben haben.

9

Sie benötigen die folgenden als Kommissionierung Intent

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

Dies ist das beste, das ich bekannt ...... dies einmal versuchen ....

final CharSequence[] options = {"Images", "Videos", "Cancel"}; 
      AlertDialog.Builder builder = new AlertDialog.Builder(OpenGallery.this); 
      builder.setTitle("Select From..."); 
      builder.setItems(options, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int item) { 
        if (options[item].equals("Images")) { 
         Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
         intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 
         startActivityForResult(intent, 1); 
        } else if (options[item].equals("Videos")) { 
         Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI); 
         intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 
         startActivityForResult(intent, 1); 
        } else if (options[item].equals("Cancel")) { 
         dialog.dismiss(); 
        } 
        dialog.dismiss(); 
       } 
      }); 
      builder.show(); 
5

Auf Android 6.0 und oben mit "video/* image/" oder "image/ video/*" Typ funktioniert nicht, es erkennt nur den ersten Filter, den Sie angeben. Ich löste das Problem mit diesem Code:

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
photoPickerIntent.setType("*/*"); 
photoPickerIntent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"}); 
startActivityForResult(photoPickerIntent, Constants.SELECT_PHOTO); 

Obwohl dies den Benutzer fragen, welche App sie das Bild/Video auszuwählen verwenden möchten.

+0

Danke, diese Antwort sollte heute höher sein – Arcantos