Android 如何将文件重命名/删除与文件系统同步

Android 如何将文件重命名/删除与文件系统同步,android,filesystems,android-gallery,android-file,Android,Filesystems,Android Gallery,Android File,在使用android文件系统时,我注意到一个我无法向自己解释的问题。使用File.renameTo()或File.delete()(无论图像是否有任何Exif数据)更改图像会导致以下结果(上述方法返回true): File.renameTo():图库仍然通过转到“详细信息”显示旧名称,下面发布的方法也返回空缩略图(当然,因为路径指向应该删除的文件) File.delete():图像已从文件系统中消失(许多经过测试的文件浏览器都不再显示该图像,新文件(pathToDeletedImage)。ex

在使用android文件系统时,我注意到一个我无法向自己解释的问题。使用
File.renameTo()
File.delete()
(无论图像是否有任何
Exif
数据)更改图像会导致以下结果(上述方法返回
true
):

  • File.renameTo()
    :图库仍然通过转到“详细信息”显示旧名称,下面发布的方法也返回空缩略图(当然,因为路径指向应该删除的文件)
  • File.delete()
    :图像已从文件系统中消失(许多经过测试的文件浏览器都不再显示该图像,
    新文件(pathToDeletedImage)。exists()
    返回
    false
    ),但图库仍显示该图像,包括所有详细信息
问题是:我是否需要以某种方式通知库我刚刚对图像文件所做的更改

我用于获取缩略图的方法:

    private Bitmap getThumbnail(ContentResolver cr, String path)
        throws Exception {

    Cursor ca = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.MediaColumns._ID },
            MediaStore.MediaColumns.DATA + "=?", new String[] { path },
            null);
    if (ca != null && ca.moveToFirst()) {
        int id = ca.getInt(ca.getColumnIndex(MediaStore.MediaColumns._ID));
        ca.close();
        return MediaStore.Images.Thumbnails.getThumbnail(cr, id,
                MediaStore.Images.Thumbnails.MICRO_KIND, null);
    }

    ca.close();
    return null;
}
更新

好的,我发现我们需要将任何文件更改与文件系统同步。我猜像
File.delete()
File.renameTo()
这样的操作在Linux级别上工作,但上面也有Android。在以编程方式删除了
DCIM
目录后,我重新设置了我的Nexus 5,画廊拒绝重新创建,如果我手动重新创建,画廊也拒绝使用它,因此所有的相机图像都是空白的。清除缓存并重新启动没有帮助。如果它发生在用户的设备上,我想我的开发者评分会降到负值

我只知道如何正确删除图像,下面的代码可以工作,并且更改是同步的(但是重命名不起作用):

现在的问题是:如何删除/重命名任何文件/目录,使更改与文件系统正确同步?

是的,我知道如何使用搜索,到目前为止还没有找到任何合适的解决方案。

试试这个:)在工作完成后添加这个:)它将帮助您传递您编辑的文件路径

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath))));

尝试使用
重命名()
,重命名相机照片会导致多媒体资料不再显示它(好像它已被删除),也不会显示缩略图。因此,仍然在寻找解决方案首先我尝试使用我的代码,但不幸的是,这对他不起作用,这是y,我给另一个好的,如果你知道,那么给ans,无论如何不要给这种类型的评论,如果你要重命名,你需要广播两个uri,我想?(新旧)。或者一个URI,级别高于两者(包含目录)。如果使用容器,请注意-如果目录包含很多文件,则媒体扫描程序可能需要一段时间才能完成。非常感谢您的回答
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath))));