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

Dro*_*man 5 filesystems android android-gallery android-file

在使用 Android 文件系统时,我可能注意到一个我无法真正向自己解释的问题。使用File.renameTo()or更改图像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;
}
Run Code Online (Sandbox Code Playgroud)

更新

好吧,我发现我们需要将所有文件更改与文件系统同步。我的猜测是,类似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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Bha*_*rma 1

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

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath))));
Run Code Online (Sandbox Code Playgroud)