Androidプログラマへの道 〜 Moonlight 明日香 〜 - サムネイルを取得する
画像のサムネイルを取得するには, MediaStore.Imagesクラスを利用する.

サムネイルの取得

  • MainActivity.java
    • getContentResolverメソッドで, ContentResolverのインスタンスを取得する.
    • ContentResolver#queryメソッドで, 第1引数に画像の保存領域のURI, 第3引数にフィルタ条件, 第4引数にファイル名を指定して, 指定したファイルの情報を取得する.
   システム領域の場合 MediaStore.Images.Media.INTERNAL_CONTENT_URI
   システム領域外の場合 MediaStore.Images.Media.EXTERNAL_CONTENT_URI   (通常こちら)
    • Cursor#getColumnIndex及びgetLongメソッドで, IDを取得する.
    • MediaStore.Images.Thumbnails#getThumbnailメソッドで, サムネイルを取得する.
package com.moonlight_aska.android.thumbnail;

import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.widget.ImageView;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Bitmap;

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageView imageView = (ImageView)findViewById(R.id.imageview);
    String fname = Environment.getExternalStorageDirectory().getPath() + "/sample/sample.jpg";
    // ファイルIDの取得
    ContentResolver resolver = getContentResolver();
    Cursor cursor = resolver.query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, // データの種類
        null, // 項目(null 全項目)
        MediaStore.Images.ImageColumns.DATA + " = ?", // フィルタ条件(null フィルタなし)
        new String[]{fname}, // フィルタ用パラメータ
        null // ソート
      );
    if (cursor.moveToFirst()) {
      // サムネイルの取得
      long id = cursor.getLong(cursor.getColumnIndex("_id"));
      Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(resolver, id, MediaStore.Images.Thumbnails.MICRO_KIND, null);
      imageView.setImageBitmap(thumbnail);
    }
  }
}
  • 動作例
Nexus 7 / Android 4.3