hyoromoのブログ

最近はVRSNS向けに作ったものについて書いています

端末内の全画像(一部除く)パスを取得してみたよ

端末に保存されるリソースは全てSQLite内に情報が格納されるみたいです。
今回は格納されている画像情報を全て取得してみました。

やりかた

Uri image_uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(image_uri, null, null, null, null);
cursor.moveToFirst();
String path = new String[cursor.getCount()];
for (int i = 0; i < path.length; i++) {
    path[i] = cursor.getString(1);
    cursor.moveToNext();
}
cursor.close();

これで path に画像パスが保管されます。
queryの第1引数のuriでドコを対象にするか決められるようです。今回は外部ストレージのみを対象としています。
ちなみに cursor.getString(引数) の引数を変えると色々なデータが取ってこれます。

引数 データ内容 実データ(例)
0 インデックス 0
1 ファイルパス /sdcard/DCIM/Camera/test.jpg
2 ファイルサイズ 337243
3 ファイル名(拡張子付き) test.jpg
4 MIMEタイプ image/jpeg
5 ファイル名(拡張子なし) test
6 謎データ*1 1256906217
7 謎データ*2 1249145692

画像以外のリソース

今回は MediaStore.Images.Media を使いましたが、このAPIの継承元は MediaStore となっており。子に Audio, Video もいます。たぶん同じ方法で同じ事ができると思います。

一部取れないデータ

DRMのかかっているデータはDrmStoreに入るようです。

感謝

twitter@splhack 先生に色々と教えて貰いました。ありがとうございます!

*1:Unixタイムでの更新日かも

*2:Unixタイムでの作成日かも