アンドロイドのギャラリーから複数の画像を選択
つまり、基本的に私が実現しようとしているのは、Androidで「ギャラリー」を開き、ユーザーに「複数の画像」を選択させることです。この質問はよく聞かれますが、私はその答えに満足していません。主な理由は、IDEのde docsで面白いことを見つけたからです(この件については後ほど説明します)。そのため、カスタムアダプターを使わず、バニラアダプターだけを使いたいのです。
現在、画像を1枚選択するためのコードは以下の通りです。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);
さて、SOや他のウェブサイトでは、2つの選択肢があると言われています。
-
ACTION_GET_CONTENT
を使わずにACTION_SEND_MULTIPLE
を使う。 この方法ではうまくいきません。これはドキュメントによると、ファイルを「送信」するもので、「取得」するものではありませんが、まさにその通りです。ACTION_SEND_MULTIPLEを使用すると、私のデバイスでウィンドウが開き、データを送信するアプリケーションを選択しなければなりません。これは私が望んでいることではないので、この解決策でどうやって実現したのか疑問です。私は何か見逃しているのでしょうか? -
「カスタムギャラリー」を実装する。なぜなら、自分でスタイルを決めなければならないし、バニラギャラリーではなぜ複数の画像を選択できないのでしょうか?
そのためのオプションがあるはずです。さて、私が見つけた興味深いことは以下の通りです。
br>*docsのACTION_GET_CONTENT
の説明で見つけました。
呼び出し側が複数のアイテムを扱える場合(ユーザーが複数選択を行う場合) 呼び出し側が複数のアイテムを扱える場合(ユーザーが複数選択を行う場合)、 EXTRA_ALLOW_MULTIPLEを指定して、それを示すことができます。 示すことができます。
これはなかなか面白いですね。ここでは、ユーザーが複数のアイテムを選択できるユースケースに言及しているのですね。
その後、彼らはドキュメントでこう言っています。
ユーザーが複数の項目を選択できるようにするには、EXTRA_ALLOW_MULTIPLE を使用できます。 アイテムを選択できるようにするためにEXTRA_ALLOW_MULTIPLEを使用することができます。
これはかなり明白ですよね?これは私が必要とするものです。しかし、次の質問は、このEXTRA_ALLOW_MULTIPLE
はどこに置けばいいのでしょうか?悲しいことに、これは developers.android guide のどこにも載っていませんし、INTENTクラスの定数としても定義されていません。
どなたか、このEXTRA_ALLOW_MULTIPLE
について教えてください。
EXTRA_ALLOW_MULTIPLEオプションは、Intent.putExtra()メソッドによってインテントに設定されます。
上記のコードは次のようになります。
注意:
EXTRA_ALLOW_MULTIPLE
オプションは、Android API 18以降でのみ利用可能です。この回答が遅くならないといいのですが......。ギャラリーウィジェットは、デフォルトでは複数選択をサポートしていませんが、マルチセレクトの意図を受け入れるグリッドビューをカスタマイズすることができます。もう一つの方法は、ギャラリービューを拡張して、複数選択を可能にする独自のコードを追加することです。 以下は、それを可能にするシンプルなライブラリです。https://github.com/luminousman/MultipleImagePick
更新:
@ilsy'さんのコメントによると、このライブラリのCustomGalleryActivityでは、
manageQuery
を使用していますが、これはdeprecatedなので、この回答のように、getContentResolver().query()
とcursor.close()
に変更する必要があります。以下のコードは正常に動作しています。
もっと詳しく知りたい方は http://mylearnandroid.blogspot.in/2014/02/multiple-choose-custom-gallery.html