在我的應用程序中,我使用DownloadManager下載PDF文件,下載完成後通過BroadcastReceiver通知應用程序。我的問題是BroadcastReceiver的onReceive()方法被調用兩次。代碼如下:BroadcastReceiver onReceive()被調用兩次
在我的列表適配器中,運行for循環以下載選定的pdf文件。下載代碼被寫入另一個類如下:
public static void downloadCheat(final SherlockFragmentActivity activity, final String cheatName, String pathOnServer){
Request request = new Request(
Uri.parse(ApplicationConstants.CHEAT_DOWNLOAD_SERVER_URL
+ "/" + pathOnServer + cheatName + ".pdf"));
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
request.setShowRunningNotification(true);
}
else {
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
final DownloadManager dm = (DownloadManager) activity
.getSystemService(Context.DOWNLOAD_SERVICE);
final long enqueue = dm.enqueue(request);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
long i = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
System.out.println(i);
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
Query query = new Query();
query.setFilterById(enqueue);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
}
}
//create custom notification
}
}
};
activity.registerReceiver(receiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
我想爲每個pdf下載添加通知。這適用於下載管理員自己的內部通知HoneyComb和以上版本,但對於GingerBread它不起作用,因此我必須推我自己的自定義通知。所以我需要確定pdf完全下載的確切時間。到目前爲止,我可以推送自己的自定義通知,但每次下載PDF時都會收到兩次通知(因爲onReceive()每個pdf需要兩次)。任何人都可以請解釋爲什麼onReceive()被調用兩次(每個pdf)。有沒有解決方法?也有人可以請推薦如何在我的情況下,廣播接收機可以取消註冊嗎?上面的代碼不是活動的一部分,所以我不知道如何取消註冊接收機。
感謝您停下來閱讀帖子。
在下載ID在兩個的onReceive()調用相同的值? downloadid可以通過intent.getLongExtra獲得(DownloadManager.EXTRA_DOWNLOAD_ID,-1) – StarPinkER 2013-03-13 00:43:13
我檢查過。當我下載兩個pdf文件時,當onReceive被調用時(first.pdf - > id = 1,second.pdf - > Id = 1),這兩個pdf的下載ID都是第一次相同。當第二次自動調用下載標識符時(first.pdf - > Id = 2,second.pdf - > id = 2)。所以基本上我可以看到四個打印語句打印1,1,2,2。是每個pdf下載的id應該是獨一無二的? – andro 2013-03-13 01:04:36
我對你的first.pdf-> id = 1和second.pdf-> id = 1感到困惑。你能否更新你的代碼,以便我更好地理解你的第一個和第二個是什麼? – StarPinkER 2013-03-13 01:17:53