web-dev-qa-db-ja.com

Android:ユーザーがギャラリーから画像またはビデオを選択できるようにします

このような方法でギャラリーを起動して、写真とビデオの両方を表示することは可能ですか?

ありがとう

33
Asahi

ギャラリーから音声ファイルを選択:

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

ギャラリーからビデオファイルを選択:

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

ギャラリーから画像を選択:

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

メディアファイルまたは画像を選択:

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

このようにギャラリーを開始します:

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

次に、onActivityResultで、ビデオまたは画像が選択されているかどうかを確認できます:

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
    }
}
39
Siavash

(編集:もう使用していません。「画像を選択」と「ビデオを選択」という2つの選択肢に戻りました。問題は一部のソニーの携帯電話にありました。注意してください!

これは私が使用するものです:

_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);
}
_

ここでのキーはintent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {"image/*", "video/*"});です

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

これにより、ユーザーにダイアログが表示されますが、少なくともICSでは機能します。他のプラットフォームでテストしていない。

8
Maurycy

返されたコンテンツの種類を判断する必要がある場合は、コンテンツリゾルバーを使用して、返されたコンテンツのMIMEタイプを取得できます。

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でできます。しかし、私のAcer betouchのcoolirisはそうではありません:私のマイルストーンでは、ビデオのURLでピックインテントでギャラリーを開始することはできませんが、画像のURLで開始すると、ビデオを選択してビデオのURLを返しますも。

1
arnodenhond

インテントのピッキングとして以下を使用する必要があります

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