Уведомление об изменении статуса запроса Downloadmanager

Я не нашел никакой информации об этом. Можно ли как-нибудь прослушать изменения статуса запроса downloadmanager? Я ставлю в очередь несколько файлов для загрузки и отображаю их в списке с состоянием загрузки. Я получаю широковещательную рассылку только на DownloadManager.ACTION_DOWNLOAD_COMPLETE, но я хотел бы получить уведомление или настроить прослушиватель, чтобы иметь возможность отслеживать изменения запроса на загрузку. Я хочу отображать состояние - добавлено в очередь, загружается, загружается...

Единственный способ, который я вижу, это запросить менеджер загрузки и проверить каждый запрос о состоянии, но мне нужно сделать это в методе getview listadapter, и это будет не очень эффективно.

1 ответ

Решение

Согласно официальной документации, нет хорошего способа сделать это. http://developer.android.com/reference/android/app/DownloadManager.html

Я бы порекомендовал либо запускать службу, либо какой-нибудь фоновый поток, который каждые несколько секунд запрашивает статус ваших загрузок. (отслеживайте их идентификаторы в long[], потому что setFilterById занимает long[])

long[] ids = new long[MyDownloadQueue.length];
// Look at all these requests I'm building!
ids[i++] = dm.enqueue(request);

Cursor cursor = dm.query(new DownloadManager.Query().setFilterById(ids));
while (cursor.moveToNext()) {
  int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
  int status = cursor.getInt(columnIndex);
  int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
  int reason = cursor.getInt(columnReason);
  // your stuff here, recording the status and reason to some in memory map
}

Таким образом, вашему списку не нужно будет выполнять какую-либо работу, а пользовательский интерфейс останется гладким. Однако на самом деле нет лучшего способа, о котором я знаю, извините, я не мог дать ответ, который не включал бы запросы.

Другие вопросы по тегам