BroadcastReceiver onReceive() immer zweimal aufgerufen

In meiner app, ich bin mit DownloadManager zum herunterladen von PDF-Dateien, die Sie informiert das Programm über einen BroadcastReceiver, sobald der download abgeschlossen ist. Mein problem ist die onReceive () - Methode der BroadcastReceiver wird immer zweimal aufgerufen. Der code ist wie folgt:

In meiner Liste-adapter, eine for-Schleife wird ausgeführt für den Download des ausgewählten pdf-Dateien. Der Download-code ist geschrieben in einer anderen Klasse wie folgt:

    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, fügen Sie Benachrichtigungen für jeden als pdf-download. Dieser arbeitet perfekt mit dem download-Manager eigene interne Meldung, die für HoneyComb und höher Versionen, aber für Lebkuchen-es funktioniert nicht, und daher habe ich push meine eigene benutzerdefinierte Meldung. So brauche ich, um zu bestimmen, die genaue Zeit, wenn die pdf-Datei vollständig heruntergeladen. Jetzt bin ich in der Lage zu schieben eigene benutzerdefinierte Meldung, aber die Benachrichtigungen kommen zweimal für jedes pdf-Dokument herunterladen (Als onReceive() wird immer zweimal für jeweils pdf). Kann bitte jemand erklären, warum onReceive() wird doppelt aufgerufen(für jedes pdf-Dokument). Gibt es Abhilfe für dieses? Auch könnte jemand bitte empfehlen, wie die broadcast-Empfänger, die un-registriert, in meinem Fall hier?Der obige code ist nicht Teil der Tätigkeit, also bin ich nicht sicher, wie die Registrierung der Empfänger.

Vielen Dank fürs vorbeischauen und Lesen der post.

  • Ist die download-id der gleiche Wert in zwei onReceive () - Aufrufe? downloadid kann man auf Vorsatz.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1)
  • Das habe ich überprüft. Wenn ich zwei pdf download ist der download-id ist die gleiche für beide pdf ' s für die erste Zeit, wenn onReceive aufgerufen wird(zuerst.pdf -> id =1, zweiter.pdf -> Id = 1). Wenn Sie wird automatisch aufgerufen, zum zweiten mal die download-id änderungen (ersten.pdf -> Id = 2, zweiten.pdf -> id = 2). Also im Grunde, ich sehe ich vier print-Anweisungen drucken 1,1,2,2. die id sollte eindeutig sein für jedes pdf-download ?
  • Ich bin verwirrt über Ihre erste.pdf->id = 1 und die zweite.pdf->id = 1. Können Sie aktualisieren Sie Ihren code, so kann ich besser verstehen, was ist Ihre erste und zweite?
  • Die obigen code-Fragment wird innerhalb einer Methode. Diese Methode wird aufgerufen, in einer for-Schleife läuft für jedes pdf-Dokument heruntergeladen werden. Also, wenn ich versuche, laden Sie zwei pdf-Dateien die for-Schleife ruft die oben genannte Methode zweimal. der sysout in der obige code druckt die download id ' s in der Reihenfolge (1,1,2,2).Ich denke sysout sollte rpint nur zwei mal mit einzigartigen download-id jedes mal. (Code-update mit sysout-Anweisung)
InformationsquelleAutor andro | 2013-03-13
Schreibe einen Kommentar