下载管理器请求状态更改通知



我没有找到任何关于这方面的信息。是否有可能以某种方式侦听下载管理器请求状态更改?我排队下载几个文件,并将其显示在具有下载状态的列表中。我只在DownloadManager.ACTION_DOWNLOAD_COMPLETE上收到广播,但我想收到一些通知或设置一些侦听器,以便我能够跟踪下载请求更改。我想要显示状态 - 添加到队列,正在下载,正在下载...

我看到的唯一方法是查询下载管理器并检查有关状态的每个请求,但我需要在列表适配器 getview 方法中执行此操作,这将不是很有效。

根据官方文档,没有很好的方法可以做到这一点。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 将保持流畅。我知道没有更好的方法,但是,抱歉,我无法提供不涉及查询的答案。

相关内容

  • 没有找到相关文章

最新更新