【问题标题】:Clear out android Downloads list清除安卓下载列表
【发布时间】:2013-01-03 22:51:25
【问题描述】:

我正在尝试制作一个应用程序,该应用程序将在我的设备上进行一些清理,除此之外,我希望它删除驻留在我的 Download 目录中的所有文件。我使用这样的方法来删除文件:

private static void deleteFiles(File path) {
    Util.Log("deleting all files underneath " + path.getName());
    if( path.exists() && path.isDirectory() ) {
        File[] files = path.listFiles();
        for(int i=0; i<files.length; i++) {
            if(files[i].isDirectory()) {
                Util.Log(files[i].getName() + " is a dir, being recursive.");
                deleteFiles(files[i]);
            }else {
                Util.Log(files[i].getName() + " is a file, deleting it.");
                files[i].delete();
            }
        }
    }
}

这是正确删除文件(我已通过文件管理器验证并插入 PC)。但是,如果我在我的设备上打开股票“下载”应用程序,所有文件仍然列在那里。当我点击一个时,我得到一个弹出窗口,上面写着“找不到下载的文件。[再试一次][删除]。再按一次尝试将重新下载文件,按删除将删除列表中的条目。我想知道是否有一些广播或其他东西可以用来告诉这个下载应用程序我希望它与当前文件系统“刷新”或“同步”,以便它能够识别出文件已被删除。

从DCIM 目录中删除图像时会发生类似的情况,删除后它们仍会出现在股票“图库”应用程序中。我能够广播一个 MEDIA_MOUNTED 意图,导致 Gallery 应用程序使用当前文件“刷新”(然后从 Gallery 应用程序中正确删除图像)。但是 MEDIA_MOUNTED 似乎不会影响下载应用程序。

是否有任何类似的方法可以告诉下载应用我希望它根据/sdcard/Download/ 目录中当前存在(或不存在)的文件刷新其列表?

【问题讨论】:

  • 您是否检查过“下载”下列出的文件是否存在于MediaStore 中?如果是,我想您应该简单地删除您从存储中物理删除的所有文件的条目。
  • 我想知道下载应用程序是否将索引存储在下载文件夹的隐藏文件中。当然,敲打那会很脏,但删除其他所有内容也是如此。
  • 下载保存在数据库中。 DownloadManager 通过 ContentProvider 与该数据库进行交互,不幸的是它不是 SDK 的一部分。

标签: android download sd-card


【解决方案1】:

实际上可以清除下载应用程序中的条目。您可以简单地使用 DownloadManager 中的remove(id) 方法。唯一的问题是您可能不再拥有下载文件的referenceId。如果您有本地文件 Uri 或文件名,您可以简单地查询 DownloadManager 以获取成功下载并查找 id。看起来很麻烦,但是很管用。

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2016-07-08
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多