我在我的项目中使用DonwloadManager,在官方参考中有关于ERROR_FILE_ALREADY_EXISTS的描述。
问题是我在使用相同的 URL 和目标 URI 时从未收到此错误。DownloadManager
总是下载相同的文件,只是在文件名的末尾添加一些数字,所以它会与以前的下载不同。
enqueue 代码非常简单并且运行良好,除了这个奇怪的东西允许您重新下载已经下载的文件:
Uri uri = Uri.parse(url);
Request request = new Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE |
DownloadManager.Request.NETWORK_WIFI);
request.setVisibleInDownloadsUi(false);
Uri fileDestinationUri = Uri.parse("file://" + new File(destinationFilePath);
request.setDestinationUri(fileDestinationUri);
long downloadId = downloadManager.enqueue(request);
我有一个BroadcastReciever
正在听android.intent.action.DOWNLOAD_COMPLETE
意图:
@Override
public void onReceive(Context context, Intent intent) {
DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
Query query = new Query();
query.setFilterById(downloadId);
Cursor cur = dm.query(query);
if (cur.moveToFirst()) {
int columnIndex = cur.getColumnIndex(DownloadManager.COLUMN_STATUS);
switch (cur.getInt(columnIndex)) {
case DownloadManager.STATUS_SUCCESSFUL:
Log.d(Settings.TAG_APP, "Download successfully completed.");
break;
case DownloadManager.STATUS_FAILED:
int columnReasonIndex = cur.getColumnIndex(DownloadManager.COLUMN_REASON);
Log.d(Settings.TAG_APP, "Download failed with error: " + cur.getInt(columnReasonIndex));
break;
}
}
cur.close();
cur = null;
}
我发现另外 2 个问题以某种方式与我的问题相关,但也没有答案:
Android - 通过下载管理器下载时覆盖文件
如何让下载管理器覆盖现有文件而不是在 android 中重命名文件