5

我正在删除一个文件

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

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

有什么方法可以查看更改而无需重新启动模拟器?我正在使用日食

4

3 回答 3

17

图库正在使用 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);
于 2012-08-26T14:01:20.103 回答
3

这与画廊如何显示图像文件有关。图像文件的缩略图缓存在 MediaStore 中,所有详细信息都存在于 Mediastore contentProvider 中。

删除文件不会更新此数据库。但是当你重新启动模拟器时,Mediascanning 是由 android 完成的。如果可以触发 MediaScanning,图库将停止显示文件

于 2012-08-26T13:59:24.743 回答
2

我使用以下代码(这也很像我创建视频的代码,它还告诉媒体系统有关文件更改并正确更新图库):

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);
            }
        });
    }
}
于 2014-02-05T22:50:25.627 回答