626 Stimmen

Was ist ein Android PendingIntent?

Ich bin ein Neuling bei Android. Ich habe die Android-Dokumentation gelesen, aber ich brauche noch etwas mehr Klarheit. Kann mir jemand sagen, was genau ein PendingIntent ist?

6voto

Ashish Rawat Punkte 3245

Ein PendingIntent umhüllt den allgemeinen Intent mit einem Token, das Sie einer fremden App zur Ausführung mit Ihrer Erlaubnis geben. Zum Beispiel:

Die Benachrichtigung Ihrer Musik-App kann die Musik nicht abspielen/anhalten, wenn Sie nicht die PendingIntent zu senden, weil Ihre Musik-App hat READ_EXTERNAL_STORAGE Erlaubnis, die die Benachrichtigungs-App nicht hat. Die Benachrichtigung ist ein Systemdienst (es handelt sich also um eine fremde App).

1 Stimmen

Tolles Beispiel!

5voto

vikseln Punkte 448

A Schwebende Absicht gibt eine Aktion an, die in der Zukunft durchgeführt werden soll. Damit können Sie ein zukünftiges Intent an eine andere Anwendung weitergeben und dieser Anwendung erlauben, das Intent so auszuführen, als hätte sie dieselben Berechtigungen wie Ihre Anwendung, unabhängig davon, ob Ihre Anwendung noch existiert, wenn das Intent schließlich aufgerufen wird oder nicht.

Dabei handelt es sich um ein Token, das Sie einer Fremdanwendung geben und das es der Fremdanwendung ermöglicht, die Berechtigungen Ihrer Anwendung zu nutzen, um ein vordefiniertes Stück Code auszuführen.

Wenn Sie der fremden Anwendung eine Absicht mitteilen und diese Anwendung die von Ihnen angegebene Absicht sendet/verbreitet, wird sie die Absicht mit ihren eigenen Berechtigungen ausführen. Wenn Sie der fremden Anwendung stattdessen einen ausstehenden Intent geben, den Sie mit Ihrer eigenen Berechtigung erstellt haben, wird diese Anwendung den enthaltenen Intent mit der Berechtigung Ihrer Anwendung ausführen.

Um einen Broadcast über einen Pending Intent durchzuführen, holen Sie sich einen PendingIntent über PendingIntent.getBroadcast(). Um eine Aktivität über einen Pending Intent auszuführen, erhalten Sie die Aktivität über PendingIntent.getActivity().

Es handelt sich um eine beabsichtigte Aktion, die Sie zu einem späteren Zeitpunkt ausführen möchten. Stellen Sie sich vor, Sie legen einen Intent auf Eis. Der Grund dafür ist, dass ein Intent aus einem gültigen Kontext in Ihrer Anwendung erstellt und gestartet werden muss. Es gibt jedoch bestimmte Fälle, in denen ein solcher Kontext zu dem Zeitpunkt, zu dem Sie die Aktion ausführen möchten, nicht verfügbar ist, weil Sie sich technisch gesehen außerhalb des Anwendungskontexts befinden (die beiden häufigsten Beispiele sind das Starten einer Aktivität aus einer Benachrichtigung oder einem BroadcastReceiver).

Wenn Sie ein PendingIntent erstellen, mit dem Sie z. B. eine Aktivität starten wollen, während Sie den Kontext dazu haben (aus einer anderen Aktivität oder einem Dienst heraus), können Sie dieses Objekt an etwas Externes weitergeben, damit es einen Teil Ihrer Anwendung in Ihrem Namen startet.

Ein PendingIntent ermöglicht es Anwendungen, auch nach Beendigung ihres Prozesses zu arbeiten. Es ist wichtig zu beachten, dass der PendingIntent auch nach dem Beenden der Anwendung, die ihn erstellt hat, noch ausgeführt werden kann. Eine Beschreibung eines Intents und der Zielaktion, die damit ausgeführt werden soll. Instanzen dieser Klasse werden mit getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService (Context, int, Intent, int) erstellt; das zurückgegebene Objekt kann an andere Anwendungen übergeben werden, damit diese zu einem späteren Zeitpunkt die von Ihnen beschriebene Aktion in Ihrem Namen ausführen können.

Indem Sie einer anderen Anwendung einen PendingIntent geben, gewähren Sie ihr das Recht, die von Ihnen angegebene Operation auszuführen, als ob die andere Anwendung Sie selbst wäre (mit denselben Berechtigungen und derselben Identität). Daher sollten Sie darauf achten, wie Sie den PendingIntent aufbauen: Häufig wird beispielsweise der Komponentenname des von Ihnen bereitgestellten Basis-Intents explizit auf eine Ihrer eigenen Komponenten gesetzt, um sicherzustellen, dass er letztendlich dorthin und nirgendwo anders gesendet wird.

Ein PendingIntent selbst ist lediglich ein Verweis auf ein vom System verwaltetes Token, das die zum Abruf verwendeten Originaldaten beschreibt. Das bedeutet, dass der PendingIntent selbst von anderen Prozessen, die ihn erhalten haben, weiter verwendet werden kann, selbst wenn der Prozess der Anwendung, die ihn erzeugt hat, beendet wird. Wenn die erzeugende Anwendung später dieselbe Art von PendingIntent (dieselbe Operation, dieselbe Intent-Aktion, dieselben Daten, Kategorien und Komponenten und dieselben Flags) erneut abruft, erhält sie einen PendingIntent, der dasselbe Token repräsentiert, sofern dieses noch gültig ist, und kann somit cancel() aufrufen, um es zu entfernen.

4voto

Omar Faroque Anik Punkte 2393

In einer einfachen Sprache,
1. Eine Beschreibung eines Vorhabens und einer auszuführenden Zielaktion. Zuerst müssen Sie einen Intent erstellen und dann eine bestimmte Java-Klasse, die Sie ausführen möchten, an den Intent übergeben.
2. Sie können diese Java-Klasse, die Ihre Aktionsklasse ist, mit PendingIntent.getActivity, PendingIntent.getActivities(Context, int, Intent[], int), PendingIntent.getBroadcast(Context, int, Intent, int) und PendingIntent.getService(Context, int, Intent, int) aufrufen; Hier sehen Sie das Intent, das aus Schritt 1 stammt
3. Sie sollten bedenken, dass... Indem Sie einer anderen Anwendung einen PendingIntent geben, erteilen Sie ihr das Recht, die von Ihnen angegebene Operation auszuführen.

Das habe ich nach einer langen Lektüre gelernt.

4voto

Rick Royd Aban Punkte 884

In einfachen Worten

A pending intent ist im Grunde eine Absicht, die Sie an andere Anwendungen oder Dienste weitergeben können, wie notification manager , alarm manager usw. und überlassen es ihnen, zu entscheiden, wann der richtige Zeitpunkt/das richtige Verhalten für die Ausführung ist.

3voto

Zar E Ahmer Punkte 32557

Wie der Name schon andeutet PendingIntent

Sie können es aufschieben (nach einiger Zeit). Es funktioniert wie die andere Absicht es ist eine Möglichkeit, Ihre Aufgabe an eine andere Anwendung zu geben, um sie in Ihrem Namen auszuführen.

1 Stimmen

Können Sie dafür ein Beispiel aus dem wirklichen Leben nennen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X