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

5
在使用Android文件系统时,我发现了一个问题,但是很难解释。使用File.renameTo()File.delete()更改图像(无论图像是否有任何Exif数据)会导致以下结果(上述方法返回true):
  • File.renameTo():通过查看详细信息,相册仍然显示旧名称,并且下面发布的方法也返回空缩略图(当然,因为路径指向应删除的文件)
  • File.delete():图像已从文件系统中删除(许多经过测试的文件浏览器都不再显示它,而new File(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,图库不仅拒绝重新创建,而且如果我手动重新创建它,它还拒绝使用它,因此所有相机图像都是空白的。清除缓存和重启没有帮助。如果这发生在用户设备上,我想我的开发者评级可能会降至负值。

我只能找出如何正确删除图像,下面的代码有效,并且更改已同步(但对于重命名无效):

    private void broadcastScanFile(File f) {
    Intent intentNotifyImgDeleted = new Intent();
    intentNotifyImgDeleted.setType("image/*");
    intentNotifyImgDeleted.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    intentNotifyImgDeleted.setData(Uri.fromFile(f));
    sendBroadcast(intentNotifyImgDeleted);
}

现在的问题是:如何删除/重命名任何文件/目录,以便更改可以正确地与文件系统同步?
附言:是的,我知道如何使用搜索,但迄今为止还没有找到合适的解决方案。

如果你正在重命名,我想你需要广播两个URI(旧的和新的)。或者是一个包含两者的URI(包含目录)。如果使用容器,请注意 - 如果目录包含很多文件,媒体扫描器可能需要一段时间才能完成。 - Stevie
非常感谢您的回答。 - hybrid
1个回答

1

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

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

尝试使用rename()进行操作,重命名相机照片会导致图库不再显示它(就像被删除了一样),也没有缩略图。因此仍在寻找解决方案。 - Droidman
尝试使用此链接:http://stackoverflow.com/questions/12529454/image-disappears-in-android-gallery-when-renamed - Bhanu Sharma
1
首先我尝试了我的代码,但不幸的是它对他不起作用,所以我给了另一个。如果你知道答案,请回答,不要在任何地方发表这种评论。 - Bhanu Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接