天天看點

android——照片管理——系統圖庫之媒體庫(二)

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())));