我有两个清单。我们称之为AlbumsList和PicturesList。
我已经使用File类完成了它,但它工作得太慢,当我只需要来自图库的那些时,它会在设备上找到所有图像。 我读过有关MediaStore内容提供商但从未使用过它。所以我有两个问题:
编辑: 看起来MediaStore.Images.Media.DATA列包含文件路径,所以我可以获取相册文件夹。 MediaStore.Images.Media.Display_NAME看起来像文件名,但我不确定它总是如此。 我可以在不进行第二次查询的情况下将缩略图数据列添加到这些列中吗?
答案 0 :(得分:12)
这里是我写的代码:
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_ID,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
ArrayList<String> ids = new ArrayList<String>();
mAlbumsList.clear();
if (cursor != null) {
while (cursor.moveToNext()) {
Album album = new Album();
int columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID);
album.id = cursor.getString(columnIndex);
if (!ids.contains(album.id)) {
columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
album.name = cursor.getString(columnIndex);
columnIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
album.coverID = cursor.getLong(columnIndex);
mAlbumsList.add(album);
ids.add(album.id);
} else {
mAlbumsList.get(ids.indexOf(album.id)).count++;
}
}
cursor.close();
它使用我的ALbum
类和之前声明的var mAlbumsList
,但我认为很清楚它是如何工作的。也许它会帮助别人。