我正在删除文件
File fileToDelete = new File("filepath");
Boolean fileDeleted = fileToDelete.delete();
fileDeleted为true,当我检查DDMS时,文件不存在,但如果我点击图库,它仍会显示刚刚删除的图像。我必须重新启动模拟器才能看到更改。
有没有办法在不重新启动电子邮件的情况下查看更改?我正在使用eclipse
答案 0 :(得分:15)
图库使用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);
答案 1 :(得分:2)
这与图库显示图像文件的方式有关。图像文件的缩略图缓存在MediaStore中,所有细节都存在于Mediastore contentProvider中。
删除文件不会更新此数据库。但是当你重新启动模拟器时,Mediascanning是由android完成的。如果可以触发MediaScanning,则图库将停止显示文件
答案 2 :(得分:0)
我使用以下代码(这也非常类似于我创建视频的代码,该代码也告诉媒体系统有关文件更改并正确更新图库):
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);
}
});
}
}
答案 3 :(得分:-4)
您需要在构建之前“清理”您的项目,它将解决问题。默认情况下,使用“缓存”构建项目,该缓存并不总是删除所有先前构造的数据。