删除的图像仍然显示在Android库中,直到我重新启动模拟器

时间:2012-08-26 13:50:04

标签: android emulation

我正在删除文件

File fileToDelete =  new File("filepath");
Boolean fileDeleted =  fileToDelete.delete();

fileDeleted为true,当我检查DDMS时,文件不存在,但如果我点击图库,它仍会显示刚刚删除的图像。我必须重新启动模拟器才能看到更改。

有没有办法在不重新启动电子邮件的情况下查看更改?我正在使用eclipse

4 个答案:

答案 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)

您需要在构建之前“清理”您的项目,它将解决问题。默认情况下,使用“缓存”构建项目,该缓存并不总是删除所有先前构造的数据。