2013-04-07 15 views
5

W moim projekcie chcę otworzyć galerię po kliknięciu przycisku i powinien być w stanie wybrać obraz lub wideo, aby uzyskać ich ścieżkę.android- otwórz galerię i wybierz obraz i wideo

Z powyższego kodu mogę otworzyć galerię, ale w tym przypadku mogę wybrać tylko obraz. Pomóż mi w wyborze wideo. Z góry dzięki.

Odpowiedz

7

poniższy kod rozwiązać mój problem

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

to jest kiepskie rozwiązanie, które niczego nie filtruje, możesz wybrać plik pdf ... – desgraci

+1

Rzeczywiście powinieneś zaakceptować odpowiedź KILA zamiast tego – akohout

14

Można użyć następny fragment:

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

Ale myślę, że to działa tylko na ICS lub większy

+5

powinien być "obraz/*" zamiast "obrazów/*" –

+6

na 6.0 to tylko pozwala wybrać filmy wideo – Danedo

+0

To wydaje się być zepsute, przynajmniej dla nowszych wersji aplikacji Android lub Google Photos. Wygląda na to, że rozpoznawany jest tylko pierwszy typ MIME na liście rozdzielanej przecinkami. – lostintranslation

2

Zmień swój zamiar to :

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

Próbując nagrać wideo, musisz podać w magazynie multimediów, że film jest w porządku, a nie obrazy w trakcie pisania.

9

Trzeba użyć następujących jak zbieranie Intent

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

Jest to najlepszy i znany ...... Spróbuj raz ....

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

W Androidzie 6.0 i powyżej przy użyciu "video/* image/" lub "image/ wideo/*" typ nie działa, rozpoznaje tylko pierwszy określony filtr. Rozwiązałem problem za pomocą tego kodu:

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

Mimo to użytkownik zapyta użytkownika, którą aplikację chce wybrać, aby wybrać obraz/wideo.

+0

Dzięki, ta odpowiedź powinna być teraz wyższa w dzisiejszych czasach – Arcantos

Powiązane problemy