web-dev-qa-db-ja.com

Android:Intent.EXTRA_ALLOW_MULTIPLEは単一のピッキングのみを許可します

「Intent.EXTRA_ALLOW_MULTIPLE」インテントフィルターを使用して、Androidギャラリーから複数の画像を開きたい:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
    final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
    startActivityForResult(Intent.createChooser(intent, "Add images"), SELECT_MULTIPLE_IMAGES);
}

ただし、使用するアプリ(ネイティブギャラリー、QuickPicアプリ)が何であれ、選択できる画像は1つだけです。テストデバイスは実行中ですAndroid 5.1。

複数の画像を選択するにはどうすればよいですか?

11
Hyndrix

これは現在、私の最近のライブアプリケーションの1つで機能しており、独自のカスタムギャラリーを作成して、4.4以降のGallaryを使用した画像の選択をカバーしています。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
    try {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_IMAGE_REQUEST_GALLERY);
    }catch(Exception e){
        Intent photoPickerIntent = new Intent(this, XYZ.class);
        startActivityForResult(photoPickerIntent, SELECT_IMAGE_REQUEST);
    }
} else {
    Intent photoPickerIntent = new Intent(this, XYZ.class);
    startActivityForResult(photoPickerIntent, SELECT_IMAGE_REQUEST);
}
11
strike

ネイティブギャラリーには複数選択はありませんが、このライブラリを使用して実行できます: https://github.com/luminousman/MultipleImagePick

2
isma3l
/**
 * Extra used to indicate that an intent can allow the user to select and
 * return multiple items. This is a boolean extra; the default is false. If
 * true, an implementation is allowed to present the user with a UI where
 * they can pick multiple items that are all returned to the caller. When
 * this happens, they should be returned as the {@link #getClipData()} part
 * of the result Intent.
 *
 * @see #ACTION_GET_CONTENT
 * @see #ACTION_OPEN_DOCUMENT
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (data.getData() != null) {
            try {
                files.clear();
                Uri uri = data.getData();
                String url = FileUtils2.getPath(this, uri);
                assert url != null;
                File file = new File(url);
                files.add(file);
                mPresenter.postAnnexData(files);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            //If uploaded with the new Android Photos gallery
            ClipData clipData = data.getClipData();
            files.clear();
            if (clipData != null) {
                for (int i = 0; i < clipData.getItemCount(); i++) {
                    ClipData.Item item = clipData.getItemAt(i);
                    Uri uri = item.getUri();
                    String url = FileUtils2.getPath(this, uri);
                    assert url != null;
                    File file = new File(url);
                    files.add(file);
                }
            }
            mPresenter.postAnnexData(files);
        }
    }
}
1
Jsaon