下载管理器完成后删除文件

4
我有一个应用程序,使用Android的DownloadManager下载文件到外部文件存储器(SD卡)上的文件夹。通常情况下,这很正常,但有些源会导致DownloadManager在下载完成后损坏文件。一个好的源文件例子是:

http://traffic.libsyn.com/hdtvpodcast/HDTV-2012-06-01.mp3

似乎问题只出现在来自libsyn.com的文件上,但我不能确定。我已经寻找了一些改变DownloadManager处理保存文件方式的方法,但是在这个类中没有找到任何选项。
这是我将URL加入下载队列的地方:
request = new Request(Uri.parse(currUrl));
external = Uri.fromFile(externalFile);
request.setDestinationUri(external);
request.setVisibleInDownloadsUi(false);
request.setNotificationVisibility(
    DownloadManager.Request.VISIBILITY_HIDDEN);
currDownloadId = dm.enqueue(request);

文件位置是使用以下内容创建的:
Environment.getExternalStorageDirectory().getAbsolutePath() + 
    File.separator + "Podcatcher" + File.separator + "Feeds" + File.separator + 
    [int] + File.separator + [int] + [string extension];

当我从DownloadManager查询DownloadManager.COLUMN_LOCAL_FILENAME列时,结果类似于这样:
/mnt/sdcard/Podcatcher/Feeds/19/225.mp3

大多数文件在下载后都可以正常保存,但这种情况不行。有什么办法可以强制DownloadManager在下载后保留文件吗?
编辑:我忽略了一点,当我使用独立的下载管理器从浏览器下载这个文件时,它在下载结束时报告失败。也许我的唯一解决方案是重新下载,而不使用DownloadManager?

也许尝试使用 dm.query() 并检查 COLUMN_STATUSCOLUMN_REASON 列以查找可能的错误? - Andrey Ermakov
每次检查状态并相应更新数据库时,我都在执行这个操作。不幸的是,我只能看到0,除此之外没有别的信息。由于我认为DownloadManager中存在bug,我觉得我必须放弃使用它来确保所有内容都被下载。尽管我还没有从头开始尝试,但我会看看是否最终出现同样的故障。 - Jeffrey Fate
抱歉,我之前说错了。当下载“完成”时,状态为8(成功)。 - Jeffrey Fate
1个回答

1
请尝试以下代码 - 我使用它时有效:
request.setMimeType(application/octet-stream);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接