在使用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。是的,我知道如何使用搜索,到目前为止尚未找到任何合适的解决方案。
答案 0 :(得分:1)
试试这个:)只需在你的工作完成后添加它:)它将帮助你传递你编辑的文件路径
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(filePath))));