Downloadmanager请求状态更改通知

时间:2012-09-28 07:15:07

标签: android download-manager

我还没有找到任何相关信息。 是否有可能听取downloadmanager请求状态的变化? 我排队下载几个文件,然后在列表中显示下载状态。我只在DownloadManager.ACTION_DOWNLOAD_COMPLETE上收到广播,但我想收到一些通知或设置一些监听器,这样我就可以跟踪下载请求的变化。我想显示状态 - 添加到队列,下载,下载...

我看到的唯一方法是查询downloadmanager并检查关于状态的每个请求,但我需要在listadapter getview方法中执行它并且效率不高。

1 个答案:

答案 0 :(得分:2)

根据官方文件,没有一种好方法可以做到这一点。 http://developer.android.com/reference/android/app/DownloadManager.html

我建议启动服务或某种后台线程,每隔几秒查询一次下载状态。 (在long []中跟踪它们的id,因为setFilterById需要很长的[])

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
}

这样您的列表视图就不必进行任何工作,UI将保持流畅。然而,我知道并没有更好的方法,抱歉,我无法提供不涉及查询的答案。