6

我正在制作一个文件管理器,其中图片项有一个小缩略图。

我使用MediaStore. 一切正常。但是当我重命名或移动文件时,缩略图不会出现。

我找到了一段代码来刷新MediaStore

getActivity().sendBroadcast(
  new Intent(Intent.ACTION_MEDIA_MOUNTED, 
             Uri.parse("file://" + Environment.getExternalStorageDirectory())));

它有效,但我必须等待 4 或 5 秒并刷新,然后缩略图更新。

重命名或移动后如何立即获取图像的缩略图?

4

4 回答 4

2

如果您使用ACTION_MEDIA_SCANNER_SCAN_FILE而不是 ,会发生什么ACTION_MEDIA_MOUNTED(即触发单个文件而不是完整目录层次结构的刷新)?

您需要将目录的 URI 替换为文件的 URI,例如使用Uri.fromFile()获得。

当您移动或重命名文件时,您应该刷新旧的和新的 URI。

于 2013-08-21T11:23:03.543 回答
1

在 Android 中更新特定图像的推荐方法是使用 ACTION_MEDIA_SCANNER_SCAN_FILE 意图。为了更顺畅

您可以在 Android 开发者网站的基本照片处理培训中查看它。

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,则使用ThumbnailUtilsBitmapFactory生成您自己的缩略图。

而且,对于处理位图并显示它,Android 培训课程中有一个简单直接的示例

于 2013-08-23T01:29:37.793 回答
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

于 2013-08-20T23:37:31.577 回答
0

实际上发送 Intent.ACTION_MEDIA_MOUNTED 广播意图真的很难看。阅读这篇文章http://androidyue.github.io/blog/2014/01/19/scan-media-files-in-android 关于重命名文件。您应该从库中删除旧文件,然后将新文件添加到库中。我认为这可以帮助你。

于 2014-01-21T05:23:08.707 回答