Eine Beschreibung einer Aktionsabsicht und Ziel mit ihm durchzuführen. Instanzen dieser Klasse sind mit
getActivity erstellt (android.content.Context, int, android.content.Intent, int), getActivities (android.content.Context, int, android.content.Intent [], int), getBroadcast (android.content.Context, int, android.content.Intent, int), getService (android.content.Context, int, android.content.Intent, int);
Das zurückgegebene Objekt kann an andere Anwendungen übergeben werden, sodass sie die von Ihnen in Ihrem Auftrag beschriebene Aktion zu einem späteren Zeitpunkt ausführen können ( ). Wenn Sie einer anderen Anwendung einen PendingIntent übergeben, erteilen Sie ihm das Recht, die von Ihnen angegebene Operation so auszuführen, als wäre die andere -Anwendung die gleiche (mit denselben Berechtigungen und derselben Identität). Als sollten Sie vorsichtig sein, wie Sie die PendingIntent: fast immer, zum Beispiel die Basis Intent Sie liefern sollte die Komponentenname explizit auf eine Ihrer eigenen Komponenten festgelegt, um sicherzustellen, es schließlich dort gesendet wird und nirgendwo sonst.
Ein PendingIntent selbst ist einfach ein Verweis auf ein Token, das vom System verwaltet wird, das die ursprünglichen Daten beschreibt, die verwendet werden, um es abzurufen. Dies bedeutet, dass der PendingIntent selbst von anderen Prozessen, die ihm zugewiesen wurden, verwendet werden kann, selbst wenn der Prozess der besitzenden Anwendung beendet wird.Wenn die Anwendung später die gleiche Art von PendingIntent (gleiche Operation, gleiche Intent-Aktion, Daten, Kategorien und Komponenten, und dieselben Flags) erneut abruft, erhält sie einen PendingIntent, der das gleiche Token darstellt, wenn das immer noch der Fall ist gültig und kann cancel() aufrufen, um es zu entfernen.
Aufgrund dieses Verhaltens ist es wichtig zu wissen, wann zwei Intents als zum Abrufen eines PendingIntent identisch angesehen werden. Ein häufiger Fehler, den Menschen machen, besteht darin, mehrere PendingIntent Objekte mit Intents zu erstellen, die sich nur in ihrem "Extra" Inhalt unterscheiden, in der Erwartung, jedes Mal einen anderen PendingIntent zu erhalten. Dies geschieht nicht passieren. Die Teile der Absicht, die für den Abgleich verwendet werden, sind die , die von Intent.filterEquals definiert sind. Wenn Sie zwei Intent Objekte verwenden, die äquivalent nach Intent.filterEquals sind, erhalten Sie denselben PendingIntent für beide.
Es gibt zwei typische Möglichkeiten, damit umzugehen.
Wenn Sie wirklich mehr verschiedenen PendingIntent Objekte aktiv zur gleichen Zeit (wie die Verwendung als zwei Benachrichtigungen, die beide zur gleichen Zeit dargestellt) benötigt, dann werden Sie Notwendigkeit gibt, um sicherzustellen, ist etwas, das anders ist über sie zu verbinden sie mit verschiedenen PendingIntents. Dies kann ein beliebiger der Intent-Attribute sein, die von Intent.filterEquals berücksichtigt werden, oder andere Anforderungscode-Ganzzahlen, die an übergeben werden. GetActivity (android.content.Context, int, android.content.Intent, int), getActivities (android.content. Kontext, int, android.content.Intent [], int), getBroadcast (android.content.Context, int, android.content.Intent, int), oder getService (android.content.Context, int, android.content . Intent, int).
Wenn Sie nur für eine der Intents ein PendingIntent aktiv zu einer Zeit benötigen Sie verwenden, dann können Sie alternativ die Fahnen FLAG_CANCEL_CURRENT oder FLAG_UPDATE_CURRENT verwenden entweder stornieren oder ändern, was auch immer aktuelle PendingIntent mit der Absicht verbunden ist, Sie sind liefern.
Schöne Frage. Ich weiß, das ist nicht richtig. Aber ich habe den vorherigen Alarm abgebrochen und neu gestartet, wann immer ich es für nötig hielt .. Ich freue mich auf die Antwort dieser Frage. –
Ich schätze seinen requestCode nur. Können Sie nicht auf die Quelle zugreifen, um sie zu überprüfen? Android Studio zeigt es normalerweise an. – Stan