端末上の画像情報を取得する

Android端末にはContentResolverという画像や音声や動画などのファイルを端末側で自動認識してそれらの情報を抽出する機能が備わっています。

この機能を使えば現在端末上にあるすべての画像ファイルを取り出すといったことが可能になります。

例えばSDカード内にあるすべての画像のファイルパスとそのファイル名を調べたい場合は次のようなコードを書きます。

public class MainActivity extends Activity 
{
    
    private final String LOG_TAG = "MainActivity : ";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        searchExternalImages();
    }
    
    /**SDカード内のすべての画像のパス名と名前をログ表示する。*/
    private void searchExternalImages()
    {
        ContentResolver cr = getContentResolver();
        
        String[] projection = 
        { 
            MediaStore.Images.Media.DATA,
            MediaStore.Images.Media.DISPLAY_NAME
        };
            //ファイルのパスと名前
        Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
                    projection, null, null, null);
        
        if(cursor == null)
            return;
        
        int pathIndex = cursor.getColumnIndex(
                MediaStore.Images.Media.DATA);
        int nameIndex = cursor.getColumnIndex(
                MediaStore.Images.Media.DISPLAY_NAME);
        
        cursor.moveToFirst();
        while(!cursor.isAfterLast()){
            Log.i(LOG_TAG, "画像パス = " + cursor.getString(pathIndex));
            Log.i(LOG_TAG, "画像名 = " + cursor.getString(nameIndex));
            cursor.moveToNext();
        }
    }
}

ここではMediaStore.Images.Media.INTERNAL_CONTENT_URIを指定してあげればOKです。

画像のパスやタイトルなどの情報はCursorクラスのgetColumnIndexメソッドでインデックス番号を取得してからgetStringメソッドなどで実際のデータに変換します。

取得できるデータの一覧についてはMediaStore.MediaColumnsの「Constants」の項目に詳しく記載されています。

関連項目
プライバシーポリシー