我有一个应用程序,使用Android的DownloadManager下载文件到外部文件存储器(SD卡)上的文件夹。通常情况下,这很正常,但有些源会导致DownloadManager在下载完成后损坏文件。一个好的源文件例子是:
这是我将URL加入下载队列的地方:
文件位置是使用以下内容创建的:
当我从DownloadManager查询DownloadManager.COLUMN_LOCAL_FILENAME列时,结果类似于这样:
大多数文件在下载后都可以正常保存,但这种情况不行。有什么办法可以强制DownloadManager在下载后保留文件吗?
编辑:我忽略了一点,当我使用独立的下载管理器从浏览器下载这个文件时,它在下载结束时报告失败。也许我的唯一解决方案是重新下载,而不使用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_STATUS
和COLUMN_REASON
列以查找可能的错误? - Andrey Ermakov