2012年11月1日木曜日

【Android】MediaStoreにサムネイルを作成させる

MediaStoreというAndroidがネイティブで持っているDBを使うと画像一覧が作りやすくなる.

Android自身が暇な時にSDカードの中を覗きに行って勝手に新しい画像を探してきて
DBに追加,サムネイルを作成してくれる.

いちいち手動でサムネイルを作成しなくても本体が作成してくれているから
その分の時間が省ける.
つまりはリスト描画の高速化が見込める.

たぶんこんな流れになっている
MediaScanner
⇒SDカード内の画像を収集,MediaStoreとサムネイル作成キューに追加

MediaProvider
⇒サムネイル作成キューを処理する

これらがAndroidで知らない間に行われている.
手元のXperia(SO-01B)で確認したところ,
MediaScannerが4枚画像を収集するぐらいの時間で
MediaProviderが1枚サムネイルを作成する.

つまり,DBへの画像追加が終わってもサムネイルは全て作成されていない.

なおサムネイル作成キューは電源を落としても消えないようだ.

MediaStoreに登録されている画像のサムネイルを取得しようとするとどうなるのだろうか.
リストに描画しようとサムネイルを取得する.
MediaStore.Images.Thumbnails::getThumbnail ()
というメソッドで取得するのだが,MediaStoreにサムネイルがない場合は律儀にも作成してから返却してくれる.
つまりそこで時間がかかる.

今回はそんなファイルたちのサムネイルを作成していこうと思う.
なお,うまいやり方が見つかるまでの一時しのぎのつもりである.

このクラスをActivity内に追加し,呼び出すとプログレスダイアログを表示し,
MediaStoreを片っ端から見ていってサムネイルがない画像のサムネイルを作成させる.

これで片っ端からサムネイルを作成していくことができる.
画像リストを作るがカーソルがあたってからサムネイルが作成されてその時々に描画を待つくらいなら
寝てる間に全て作ってくれたほうが嬉しいという場合にどうぞ.

なにか他にうまいやり方あればいいなぁとは思うが.

0 件のコメント:

コメントを投稿