我正在删除一个文件
File fileToDelete = new File("filepath");
Boolean fileDeleted = fileToDelete.delete();
fileDeleted 为真,当我检查 DDMS 时,文件不存在,但如果我点击图库,它仍会显示刚刚删除的图像。我必须重新启动模拟器才能看到更改。
有什么方法可以查看更改而无需重新启动模拟器?我正在使用日食
图库正在使用 Android 的媒体数据库来显示媒体列表。在再次扫描文件系统之前,删除文件不会反映在数据库中。例如,这是在重新启动后完成的。
您可以直接通过数据库删除文件,也可以强制它扫描刚刚删除的文件或文件夹。
File fileToDelete = new File("filepath");
boolean fileDeleted = fileToDelete.delete();
// request scan
Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
scanIntent.setData(Uri.fromFile(fileToDelete));
sendBroadcast(scanIntent);
这与画廊如何显示图像文件有关。图像文件的缩略图缓存在 MediaStore 中,所有详细信息都存在于 Mediastore contentProvider 中。
删除文件不会更新此数据库。但是当你重新启动模拟器时,Mediascanning 是由 android 完成的。如果可以触发 MediaScanning,图库将停止显示文件
我使用以下代码(这也很像我创建视频的代码,它还告诉媒体系统有关文件更改并正确更新图库):
private void deleteVideo(String videoUrl)
{
File videoFile = new File(videoUrl);
if (!videoFile.delete())
{
Log.e(TAG, "Failed to delete " + videoUrl);
}
else
{
MediaScannerConnection.scanFile(mContext,new String[] { videoUrl }, null, new MediaScannerConnection.OnScanCompletedListener()
{
public void onScanCompleted(String path, Uri uri)
{
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
}
}