6

すべてのダウンロードが完了したかどうかを同時実行の理由から知る必要があるアプリを構築しています。特定の機能は、すべてのダウンロードが終了したときにのみ開始できます。

古いダウンロードのキューをチェックする関数を書くことができました:

DownloadManager dm = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE);

    Query q = new Query();
    q.setFilterByStatus(DownloadManager.STATUS_FAILED|DownloadManager.STATUS_PENDING|DownloadManager.STATUS_RUNNING);

    Cursor c = dm.query(q);

問題は、確かに、初期化時にキューをクリーンアップしてすべてのエントリを削除したいということです。

エントリを削除する方法はありますか?

ファイルを物理的に削除したくないため、この機能は機能しませんでした...キューを空にするだけです。

何か案は?

4

2 に答える 2

2

Can you wait for the DownloadManager to finish only your own downloads? To achieve this, you can save handles of your downloads with something like this:

List<Long> downloadIds = new ArrayList<>();
downloadIds.add(downloadManager.enqueue(request));

Then you can query the downloadManager this way:

    Query q = new Query();
    long[] ids = new long[downloadIds.size()];
    int i = 0;
    for (Long id: downloadIds) ids[i++] = id;
    q.setFilterById(ids);
    Cursor c = downloadManager.query(q);
    Set<Long> res = new HashSet<>();
    int columnStatus = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
    while (c.moveToNext()) {
        int status = c.getInt(columnStatus);
        if (status != DownloadManager.STATUS_FAILED && status != DownloadManager.STATUS_SUCCESSFUL) {
            // There is at least one download in progress
        }
    }
    c.close();

Bear in mind that this can work if you're interested only in your own downloads, not every possible download that can occur system wide.

Hope this helps.

于 2014-09-22T13:10:36.817 に答える