Content Providerで画像を列挙する
単純に画像を選択するだけなら、Intentを使ってアクティビティ(通常はギャラリー)を起動して結果を受け取るのが楽ですが、これだとやっぱり細かい制御ができないよね、ってことで、Content Provider経由で画像を列挙して見ます。
リファレンス
Androidの開発者ガイドを参考にします。また、画像を列挙するので、MediaStore.Images.Mediaを中心に参照します。
データの列挙
開発者ガイドを眺めると、表が出てきて、行やら列やらに言及されていて、なんのこっちゃ?という感じですが、要するにContent ProviderではRDBのようにテーブル(表)でデータを管理していて、アクセスもSQL文のような感じで行うよって事です。
そのためか、データを取得する際のメソッドはquery、引数の説明などもSQLに準じて行われます。
String[] projection = { Media.DISPLAY_NAME // ファイル名 }; Cursor cur = Media.query(getContentResolver(), Media.EXTERNAL_CONTENT_URI, projection); if (cur != null) { while (cur.moveToNext()) { Log.d("EnumImages", cur.getString(0)); } }
queryの呼び出しはgetContentResolver().queryでもよいし、Media.queryでも良いです。ただ、Images.Mediaではそうでもないですが、Images.Thumbnailsなどを見ると引数が調整されたqueryメソッドが準備されていたり、ダイレクトにデータにアクセスできるメソッドが準備されているので、コンテンツに特化したものを使ったほうがコードがシンプルになりますね。
ちなみにqueryメソッドはwhere引数が不正だった場合に例外が飛びます。未キャッチのエラーも無かったし、nullのエラーチェックもあるしってことで油断していたというか・・・はじめアプリが落ちる理由が分からなくて苦労しました。