Уведомление об изменении статуса запроса 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
}
Таким образом, вашему списку не нужно будет выполнять какую-либо работу, а пользовательский интерфейс останется гладким. Однако на самом деле нет лучшего способа, о котором я знаю, извините, я не мог дать ответ, который не включал бы запросы.