BroadcastReceiver onReceive () wird zweimal aufgerufen

8

In meiner App verwende ich den DownloadManager, um PDFs herunterzuladen, die die Anwendung über einen BroadcastReceiver benachrichtigen, sobald der Download abgeschlossen ist. Mein Problem ist die onReceive () Methode von BroadcastReceiver wird zweimal aufgerufen. Der Code ist wie folgt:

In meinem Listenadapter wird eine for-Schleife zum Herunterladen der ausgewählten PDFs ausgeführt. Der Download-Code wird wie folgt in eine andere Klasse geschrieben:

%Vor%

Ich versuche, Benachrichtigungen für jeden PDF-Download hinzuzufügen. Dies funktioniert perfekt mit den internen Managern von Download-Managern für HoneyComb und höhere Versionen, aber für GingerBread funktioniert es nicht und daher muss ich meine eigene benutzerdefinierte Benachrichtigung pushen. Also muss ich den genauen Zeitpunkt bestimmen, zu dem das PDF vollständig heruntergeladen wird. Ab jetzt bin ich in der Lage, meine eigene benutzerdefinierte Benachrichtigung zu pushen, aber die Benachrichtigungen kommen zweimal für jeden PDF-Download (As onReceive () wird zweimal für jedes PDF). Kann jemand bitte erklären, warum onReceive () zweimal aufgerufen wird (für jedes pdf). Gibt es einen Workaround dafür? Könnte auch jemand bitte empfehlen, wie der Broadcast-Empfänger in meinem Fall hier nicht registriert werden kann? Der obige Code ist kein Teil von Activity, daher bin ich mir nicht sicher, wie ich den Empfänger abmelden soll.

Danke, dass Sie vorbeischauen und den Beitrag lesen.

    
andro 13.03.2013, 00:19
quelle

3 Antworten

3

Normalerweise registrieren Sie die Empfänger onResume() und die Registrierung in onPause() . Machst du das?

Ich glaube, ich habe ursprünglich missverstanden, was Sie zu tun versuchten. Sie können unregisterReceiver von onReceive aufrufen. Macht das, was Sie wollen?

    
yarian 13.03.2013 00:29
quelle
1

Sie sagten, Sie laden zwei pdfs herunter. Ich sehe nur eine Download-Anfrage in Ihrer Methode. Ich nehme also an, Sie haben diese Methode zweimal aufgerufen. Wenn das wahr ist, haben Sie tatsächlich zwei Empfänger registriert, um das ACTION_DOWNLOAD_COMPLETE -Ereignis zu erhalten.

Sie müssen sich nur einmal bei onCreate oder onStart oder anderen Methoden registrieren. Zu Benachrichtigungszwecken können Sie intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1) verwenden, um die Download-ID zu erhalten. Die ID ist für jeden Download eindeutig. Sie können diese ID verwenden, um Informationen über die heruntergeladene Datei abzurufen und eine dateispezifische Benachrichtigung zu erstellen.

    
StarPinkER 13.03.2013 01:15
quelle
1

Das sieht wie der gleiche Fehler aus, der hier beschrieben wird: Ссылка

    
Brill Pappin 31.07.2013 19:58
quelle