Android Download Manager окончательно завершен

Я успешно создал диспетчер загрузки и действие намерения трансляции, отправленное диспетчером загрузки после завершения загрузки: используя этот Android менеджер загрузок завершен

Но я использую менеджер загрузок для загрузки не 1 файла, а около 5-10 файлов всякий раз, и это намерение:

registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

BroadcastReceiver onComplete=new BroadcastReceiver() {
public void onReceive(Context ctxt, Intent intent) {
    // your code
}

запускается каждый раз, когда завершена одна загрузка.

Как отправить Intent, когда все файлы загружены?


person Simo    schedule 22.03.2016    source источник
comment
Держите список всех загружаемых файлов. Отметьте, когда они будут выполнены (используйте для этого файл или базу данных, так как ваше приложение может быть убито). Если не осталось файлов, помеченных как не выполненные, вы загрузили все файлы. Для этого подойдет таблица БД.   -  person Gabe Sechan    schedule 22.03.2016
comment
Нет ли какого-либо события, связанного с диспетчером загрузок? Я реализовал его в пользовательском классе, поэтому ваши решения слишком сложны для реализации.   -  person Simo    schedule 22.03.2016
comment
используйте DownloadManager#query(), чтобы увидеть статус ваших загрузок (DownloadManager#STATUS_*)   -  person pskink    schedule 22.03.2016


Ответы (1)


Создайте класс, скажем, MyDownloadManager для вашего кода загрузки, и каждый раз, когда вам нужно загрузить новый файл, вызывайте новый экземпляр класса MyDownloadManager. DownloadManager по умолчанию в Android обработает это автоматически и начнет загрузку нескольких файлов.

private void downloadFile(String url){
        MyDownloadManager downloadManager = new MyDownloadManager();
        downloadManager.DownloadFile(getApplicationContext(), url);
    }

Ваш класс MyDownloadManager будет выглядеть следующим образом:

public class MyDownloadManager{
private Context mContext;
private String url;

public void Download(Context context, String url){
    mContext = context;
    this.url = url;
    String serviceString = Context.DOWNLOAD_SERVICE;
    DownloadManager downloadManager;
    downloadManager = (DownloadManager)mContext.getSystemService(serviceString);    
    DownloadManager.Request request = new DownloadManager.Request(uri);
    long reference = downloadManager.enqueue(request);
}

public void RegisterDownloadManagerReciever(Context context) {
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                // Do something on download complete
            }
        }
    };
    context.registerReceiver(receiver, new IntentFilter(
            DownloadManager.ACTION_DOWNLOAD_COMPLETE));
    }
}
person Deepak Sharma    schedule 22.03.2016
comment
Этот пример представляет собой простой DownloadManager, событие вызывается каждый раз, когда завершается одна загрузка. Например, если я вызову downloadFile 6 раз, у меня будет шесть событий. - person Simo; 30.03.2016
comment
Менеджер загрузки регистрируется в последней строке класса MyDownloadManager. Хорошо, что событие запускается 6 раз, потому что таким образом вы можете загружать несколько файлов одновременно. - person Deepak Sharma; 01.04.2016