4

我在我的项目中使用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 中重命名文件

4

0 回答 0