今天做项目遇到这样的需求,测试相机,自动拍照并保存照片到指定目录,调用图库直接查看该目录中的相片是否出现异常(如率绿屏、只显示一般图像等)。由于可能会长时间疲劳测试,所以需要隔段时间清一次照片。这是就出现了传说中的图库缓存问题:通过设定定时器将目录照片删除后,相册中还会显示之前相片的缩略图,测一天的话多大近万张!
解决之道,是操作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