今天做項目遇到這樣的需求,測試相機,自動拍照並保存照片到指定目錄,調用圖庫直接查看該目錄中的相片是否出現異常(如率綠屏、只顯示一般圖像等)。由於可能會長時間疲勞測試,所以需要隔段時間清一次照片。這是就出現了傳說中的圖庫緩存問題:通過設定定時器將目錄照片刪除後,相冊中還會顯示之前相片的縮略圖,測一天的話多大近萬張!
解決之道,是操作mediaStore數據庫,拍照時插入uri,刪除時刪掉該uri,然後掃描圖片,圖庫中就可以實時更新了。
//拍照時約定MediaStore.Images.Media.DESCRIPTION = "lyt_03_test",方便刪除時查找。
/**
* 存儲圖像並將信息添加入媒體數據庫
*/
private Uri insertImage(ContentResolver cr, String name, long dateTaken,
String directory, String filename) {
String filePath = directory + filename;
ContentValues values = new ContentValues(7);
values.put(MediaStore.Images.Media.TITLE, name);
values.put(MediaStore.Images.Media.DESCRIPTION, "lyt_03_test");
values.put(MediaStore.Images.Media.DATE_TAKEN, dateTaken);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.DATA, filePath);
return cr.insert(IMAGE_URI, values);
//通知更新
Intent intent = new Intent("videocameraupdate");
intent.putExtra("uriStr", uri.toString());
intent.putExtra("dateTaken", nowRTC);
sendBroadcast(intent);
}
刪除照片
//從meida數據庫中刪除BrTest相冊中的所有照片,約定MediaStore.Images.Media.DESCRIPTION ='lyt_03_test'
private void deleteTestImgsFromMeida(){
//當然,還需要刪除正真的照片
Log.d(TAG, "---------- delete pictures ---------");
Log.d(TAG, "---------- delete pictures ---------");
Log.d(TAG, "---------- delete pictures ---------");
FileOpertor.delAllFile(Environment.getExternalStorageDirectory()+"/DCIM/BrTest/");
try {
this.getContentResolver()
.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI
, MediaStore.Images.Media.DESCRIPTION + "='lyt_03_test'", null);
//也可以不通知掛載更新,因爲上面直接更新了數據庫
// sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
// Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()+"/DCIM/BrTest")));
} catch (Exception e) {
// TODO: handle exception
Log.w(TAG, e.toString());
}
}
參考
http://android.tgbus.com/Android/tutorial/201104/350881.shtml