[Android] ギャラリーの画像を取得する

ギャラリーから画像を取得して表示したい場合に以前は、intent.setAction(Intent.ACTION_GET_CONTENT);
を使っていましたが、KitKat 以降は使えなくなりました。
 
http://developer.android.com/intl/ja/guide/topics/providers/document-provider.html
Storage Access Framework を使います
 
以下は、ボタンをタップしてギャラリーを呼び出し画像を選ぶと、その画像が表示される例です。
 

gallery_1b
ギャラリーのパス
gallery_2
ギャラリーの画像
gallery_3

Android Studio 2.1.1
Android 6.0

 

sponsored link

Storage Access Framework

 
ACTION_OPEN_DOCUMENT を使って、画像ファイルがあるドキュメント プロバイダを検索します。

 
ピッカーから画像を選択すると、onActivityResult() が呼び出され、選択した画像を指す URI は resultData パラメータに含まれます。
getData() を使って URI を抽出します。

このケースでは、パーミッションなど必要ありません
 
まとめるとこうなります。
MainActivity.java

 
activity_main.xml

 

emulator gallery 画像

 
実際は実機での確認が必要ですが(ギャラリーという名前もまちまちだったりましす)、emulatorで確かめる方法として、ADM(DDMS)からギャラリーに画像を入れておくとができます。
 
「Tools」「Android」「Android Device Monitor」を起動します。
「File Explrer」タグでemulator内部構造が見えてきます。
アプリを起動すると「ギャラリーのPath」がわかりますが、ここでは
/storage/emulated/0/DCIM/
となりますので、ここに画像をコピペします。
 
gallery_1
 
これでemulatorのgalleryを開けるとそこに画像があることが分かります。
 

関連ページ:
スマホ内の画像を検索してpathを表示させます。
MediaStore スマホの画像を検索

Reference:
Storage Access Framework