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

时间:2014-04-08 10:48:30

标签: android filesystems android-gallery android-file

在使用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,Gallery拒绝重新创建,如果我手动重新创建它也拒绝使用它,因此所有相机图像都只是空白。清除缓存和重新启动没有帮助。如果它发生在用户的设备上,我猜我的开发者评级会下降到负值。

我只能弄清楚如何正确删除图像,以下代码可以正常工作并且更改已同步(但不能用于重命名):

    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);
}

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

P.S。是的,我知道如何使用搜索,到目前为止尚未找到任何合适的解决方案。

1 个答案:

答案 0 :(得分:1)

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

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