webentwicklung-frage-antwort-db.com.de

Was ist "requestCode" für PendingIntent?

Hintergrund:

Ich verwende PendingIntent für Alarme über AlarmManager.

Das Problem:

Zuerst dachte ich, dass ich zum Abbruch der vorherigen den exakten requestCode angeben muss, den ich zuvor zum Starten des Alarms verwendet habe.

Aber dann habe ich herausgefunden, dass ich falsch lag, als die cancel API sagt:

Entfernen Sie alle Alarme mit einer übereinstimmenden Absicht. Ein beliebiger Alarm, deren Absicht mit dieser übereinstimmt (wie durch filterEquals (Intent) definiert), wird abgebrochen.

in der Dokumentation " filterEquals " heißt es:

Bestimmen Sie, ob zwei Absichten für die Zwecke der Absicht identisch sind Auflösung (Filterung). Das heißt, wenn ihre Aktion, Daten, Typ, Klasse, und Kategorien sind gleich. Dies vergleicht keine zusätzlichen Daten in den Intentionen enthalten.

also verstehe ich nicht, wofür der "requestCode" steht ...

Die Frage:

Wofür wird "requestCode" verwendet?

Was ist, wenn ich mehrere Alarme mit demselben "requestCode" erstellt habe? überschreiben sie sich?

81
  1. requestCode wird verwendet, um später die gleiche ausstehende Intent-Instanz abzurufen (zum Abbrechen usw.).
  2. Ja, ich schätze, die Alarme überschreiben sich. Ich würde die Anforderungscodes eindeutig halten.
65
Minhaj Arfin

Ich möchte nur @Minhaj Arfin Antwort hinzufügen

1- requestCode wird verwendet, um die gleiche ausstehende Absicht später zu erhalten (zum Abbrechen usw.)

2- Ja, sie werden außer Kraft gesetzt, solange Sie den gleichen Empfänger für Ihre Absicht angeben, den Sie auf Ihrer PendingIntent angeben

beispiel:

Intent startIntent1 = new Intent(context, AlarmReceiverFirst.class);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 0, startIntent1, 0);

Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, 0);

Aus dem obigen Beispiel wird nicht einander überschreiben weil der Empfänger unterschiedlich ist (AlarmReceiverFirst und AlarmReceiverSecond)

Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, 0);

Intent startIntent3 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent3 = PendingIntent.getBroadcast(context, 0, startIntent3, 0);

Im obigen Beispiel überschreiben sie sich wird, weil der Empfänger derselbe ist (AlarmReceiverSecond)

26
HendraWD

in meinem Fall möchte ich dieselbe Aktivität mit zwei verschiedenen Absichten öffnen. Wenn also zwei oder mehr FCMS in der Taskleiste vorhanden sind, wird einer von ihnen nur den anderen öffnen. Daher habe ich die Anforderungscodes der anstehenden Absicht geändert und dann funktioniert.

 PendingIntent pendingIntent =
                            PendingIntent.getActivity(this, **Some unique id for all GCMS** /* Request code */, intent,
                                    PendingIntent.FLAG_ONE_SHOT);
1
JSONParser

eine wichtige Sache bei requestCode, die Ihre App ernsthaft stört, ist die Verwendung von Widgets. Widgets funktionieren nach dem Neustart des Telefons nicht, wenn ihre requestCode identisch sind. Das bedeutet, dass für das pendingIndent, das Sie für das remoteViews Ihres Widgets festgelegt haben, ein eindeutiger requestCode festgelegt werden muss, in der Regel die Widget-ID, die einer Zahl beiliegt.

0
Jim