java代码中使用android媒体数据库:
用ContentResolver去调用:
// 只拿DCIM下的图片
String[] columns = { Media.DATA };
String where = Media.DATA + " like \'/mnt/sdcard/DCIM/%\'";
// 得到游标
Cursor cursor = context.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, columns, where, null, null);
while (cursor.moveToNext())
{
// 获得制定列的值
String key = cursor.getString(cursor.getColumnIndexOrThrow(Media.DATA));
}
cursor.close();
//获得相册列表
String[] columns = { Media.BUCKET_DISPLAY_NAME };
String groupby = " 1=1 ) group by ("+Media.BUCKET_DISPLAY_NAME;
Cursor cursor = activity.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, columns, groupby, null, null);
while (cursor.moveToNext())
{
String name = cursor.getString(cursor.getColumnIndexOrThrow(Media.BUCKET_DISPLAY_NAME));
}
cursor.close();
getContentResolver().query方法中:
第一个参数Media.EXTERNAL_CONTENT_URI为所要查询的表,代表from images;
第二个代表所要查询的列,当输入为null则代表select *;
第三个代表where,所以若想group by则会拼出以上奇怪的字符串,其意思相当于where (1=1) group by (bucket_display_name)
若对图片媒体文件进行了增删改的操作时,如果不更新该数据库则会造成显示内容与数据库内容不同步,android只会定时使用媒体扫描器去同步数据库,而我们可以手动启用媒体扫描器,一行代码即可:
// 发送一个广播更新媒体数据库信息
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));