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 lautet wie folgt:BroadcastReceiver onReceive() wird zweimal aufgerufen
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:
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));
}
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 Rundfunkempfänger in meinem Fall hier nicht registriert werden kann? Der obige Code ist kein Teil von Activity, also bin ich mir nicht sicher, wie ich den Empfänger abmelden soll.
Danke, dass Sie vorbeischauen und die Post lesen.
Ist der Download-ID der gleiche Wert, dass zwei OnReceive() Anrufe? downloadid kann mit intent.getLongExtra (DownloadManager.EXTRA_DOWNLOAD_ID, -1) – StarPinkER
abgerufen werden. Wenn ich zwei PDFs herunterlade, ist die Download-ID für beide PDFs zum ersten Mal dieselbe, wenn onReceive aufgerufen wird (first.pdf -> id = 1, second.pdf -> Id = 1). Wenn es automatisch zum zweiten Mal aufgerufen wird, ändert sich die Download-ID (first.pdf -> Id = 2, second.pdf -> id = 2). Also im Grunde sehe ich vier Druckanweisungen, die 1,1,2,2 drucken. Soll die ID für jeden PDF-Download eindeutig sein? – andro
Ich bin verwirrt über Ihre erste.pdf-> id = 1 und zweite.pdf-> id = 1. Können Sie Ihren Code aktualisieren, damit ich besser verstehe, was ist Ihre erste und zweite? – StarPinkER