我正在创建一个文件管理器,其中图片项目有一个小缩略图。
我使用MediaStore
获取缩略图。一切正常。但是当我重命名或移动文件时,缩略图不显示。
我找到了一段代码来刷新MediaStore
:
getActivity().sendBroadcast(
new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
它工作但我必须等待4或5秒并刷新,然后缩略图更新。
如何在重命名或移动后立即获取图像缩略图?
答案 0 :(得分:2)
如果您使用ACTION_MEDIA_SCANNER_SCAN_FILE而不是ACTION_MEDIA_MOUNTED
会发生什么情况(即触发单个文件而不是整个目录层次结构的刷新)?
您需要将文件的URI替换为目录的URI,例如使用Uri.fromFile()获取。
移动或重命名文件时,应刷新旧URI和新URI。
答案 1 :(得分:1)
在Android中更新一个特定图像的推荐方法是使用ACTION_MEDIA_SCANNER_SCAN_FILE意图。而且更顺畅
您可以在Android开发者网站的Basic Photo Handling Training查看。
private void galleryAddPic() {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(mCurrentPhotoPath);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
}
如果您想立即为某些丢失的文件显示新的缩略图,您可以自己完成。首先,像以前一样检查MediaStore,如果返回的缩略图为null,则使用ThumbnailUtils或BitmapFactory生成您自己的缩略图。
而且,为了处理位图并显示它,Android培训课程中有一个安静的straightforward sample。
答案 2 :(得分:0)
您是否尝试直接在要更改的目录上进行扫描?而不是
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
类似
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory() + "/path/to/your/folder")));
另一种方法是手动使用ThumbnailUtils。
答案 3 :(得分:0)
实际上发送Intent.ACTION_MEDIA_MOUNTED广播意图真的很难看。阅读这篇文章http://androidyue.github.io/blog/2014/01/19/scan-media-files-in-android至于重命名文件。您应该从库中删除旧文件,然后将新文件添加到库中。我想这可以帮到你。