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