web-dev-qa-db-ja.com

android-ギャラリーを開いて画像と動画を選択

私のプロジェクトでは、ボタンをクリックしてギャラリーを開き、画像またはビデオを選択してそれらのパスを取得できるようにする必要があります。

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

startActivityForResult(i, RESULT_LOAD_IMAGE);

上記のコードからギャラリーを開くことができますが、この場合は画像のみを選択できます。それで、ビデオを選ぶのも手伝ってください。前もって感謝します。

14
stack

以下のコードは私の問題を解決しました

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

次のスニペットを使用できます。

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

しかし、私はそれがICS以上でのみ機能すると思います

18
Jc Miñarro

Android 6.0以上で "video/* image/"または "image / video/*"タイプを使用すると機能しません。最初のフィルターのみが認識されますこのコードを使用して問題を解決しました:

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

これは、画像/ビデオを選択するために使用するアプリをユーザーに尋ねます。

11
YYamil

インテントの選択として次を使用する必要があります

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

これは私が知っている中で最高です......一度試してみてください...

 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();
3
Ramaraju

インテントを次のように変更します。

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

動画を取得しようとするときは、MediaStoreにその動画が適切であり、書いた画像ではないことを伝える必要があります。

2
MaTriXy