我正在使用Android DownloadManager系统服务以以下方式下载一些文件
dwnId = mgr.enqueue(new DownloadManager.Request(serveruri)
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI |
DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false)
.setTitle(getAlbumName())
.setDescription(getTrackName())
.setDestinationUri(deviceUri)
.setShowRunningNotification(true));
其中mgr
是Download Manager实例,dwnId
是返回的唯一ID。我还注册了ACTION_DOWNLOAD_COMPLETE
事件。
registerReceiver(onDownloadComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
在onDownloadComplete BroadcastReceiver的onReceive()方法中,我获取到了下载ID:
Long dwnId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
之后我会查询下载管理器以获取下载状态
Cursor c = downloadManager.query(new DownloadManager.Query().setFilterById(dwnId)); c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
对于DownloadManager.STATUS_*常量。问题在于我收到了相同的downId两次(意味着onReceive方法被调用了两次),一次是成功的DownloadManager.STATUS_SUCCESSFUL状态,一次是失败的DownloadManager.STATUS_FAILED状态,但是这两次是针对同一个dwnId。我一次性发出了下载10个文件的请求,在设备上下载管理器中却显示通知栏左上方的下载计数为12或13。我认为下载管理器在下载文件时存在问题,导致重新启动下载相同的文件。这就是我请求下载的文件数量和实际下载队列中的实际数量之间存在差异的原因。正是因为这个原因,我才会收到相同的DownloadId完成操作两次。如果这是真的,请问如何限制它。我错了吗?造成请求和实际下载之间的数量差异可能是什么原因?为什么广播接收器会收到相同的下载ID两次?请问有人可以告诉我吗?
提前感谢...
onReceive
方法被调用了两次,因为我注册了多个接收器:一个由清单文件注册,一个在onCreate()
中使用registerReceiver()
方法注册。 - marioosh