Frage

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

War es hilfreich?

Lösung

Ein PendingIntent ist ein Zeichen, dass Sie geben an eine ausländische Anwendung (zB NotificationManager, AlarmManager, Home Screen AppWidgetManager oder andere 3rd-Party-Anwendungen), die ermöglicht die ausländischen Anwendung Ihrer Anwendung Berechtigungen verwenden, um eine vordefinierte Stück auszuführen Code .

Wenn Sie die fremde Anwendung eine Intent geben, wird es Ihre Intent mit eigenen Berechtigungen auszuführen. Aber wenn man die fremden Anwendung eine PendingIntent geben, wird diese Anwendung ausführen Ihre Intent Ihrer Anwendung Erlaubnis verwenden.

Andere Tipps

INTENT

Intents sind der Standard-Messaging-Mechanismus in Android, die die Absicht des Benutzers zum Ausdruck bringen einige Arbeit zu verrichten. Sie ermöglichen es, mit anderen Komponenten von Ihnen oder dem Android-Betriebssystem definiert zu interagieren.

Beispiel:

  1. Broadcast-Nachricht
  2. Starten Sie die Kamera
  3. Starten Sie einen Dienst
  4. eine Aktivität starten
  5. Zeigen Sie eine Webseite oder eine Liste der Kontakte
  6. eine Rufnummer wählen oder einen Anruf beantworten

    Sie werden in beiden Richtungen benutzen

1) durch Sie eine Komponente

nennen

2) durch das System, das Sie von einem Ereignis zu informieren.

Die logische Workflow eine Absicht zu schaffen, ist in der Regel wie folgt:

  • Erstellen Sie die Absicht
  • b. In Intent Optionen-> Ex. welche Art von Vorsatz wir an die OS senden oder alle Attribute mit dieser Absicht, wie ein Text-String oder etwas übergeben wird zusammen mit der Absicht
  • zugeordnet
  • c. RUN, um die Absicht

Real Life Beispiel: Sagen wir, ich aufwachen am Morgen und ich " BEABSICHTIGEN " auf die Toilette zu gehen. Ich werde zunächst auf die Toilette müssen darüber nachdenken, gehen, aber das ist nicht wirklich bringt mich auf die Toilette. Ich muss dann mein Gehirn sagen, zuerst aus dem Bett raus, dann auf die Toilette gehen und dann freigeben, dann gehen und meine Hände waschen, dann gehen und meine Hände wischen. Sobald ich weiß, wohin ich gehe sende ich den Befehl beginnen und mein Körper ergreift Maßnahmen.

PendingIntent

gibt einen PendingIntent eine Aktion in der Zukunft. Es ermöglicht Ihnen eine Zukunft Intent an eine andere Anwendung übergeben und ermöglichen, dass die Anwendung dieser Absicht auszuführen, als ob es die same permissions as your application hatte, ob Ihre Anwendung ist immer noch rund, wenn die Absicht ist, schließlich aufgerufen. Es ist ein Zeichen, dass Sie zu einer fremden Anwendung geben, die die fremde Anwendung ermöglicht es Ihre Anwendung Berechtigungen zu verwenden, um einen vordefinierten Stück Code auszuführen.

Durch einen PendingIntent zu einer anderen Anwendung zu geben, gewähren Sie das Recht, den Vorgang auszuführen Sie angegeben haben, als ob die andere Anwendung selbst war (mit den gleichen Berechtigungen und Identität). Als solches sollten Sie vorsichtig sein, wie Sie die PendingIntent bauen: oft, zum Beispiel die Basis Intent Sie den Namen der Komponente explizit festgelegt haben, um eine Ihrer eigenen Komponenten, um sicherzustellen, dass es letztlich liefern wird, ist geschickt, um dort und nirgendwo sonst.

Es ist eine Intent Aktion, die Sie ausführen möchten, aber zu einem späteren Zeitpunkt. Denken Sie daran, eine eine Absicht auf Eis setzen. Der Grund ist es nötig ist, weil eine Absicht erstellt werden muss und von einer gültigen Context in Ihrer Anwendung gestartet, aber es gibt bestimmte Fälle, in denen man zur Zeit nicht zur Verfügung steht die Aktion ausgeführt werden soll, weil Sie technisch außerhalb des Kontexts der Anwendung sind (die zwei gemeinsame Beispiele sind eine Aktivität aus einer Mitteilung starten oder ein BroadcastReceiver.By Schaffung eines PendingIntent Sie Start verwenden möchten, sagen wir, eine Aktivität, während Sie haben die Context, dies zu tun (von innerhalb einer anderen Aktivität oder Service)

Fortsetzung von dem realen Beispiel: Lassen Sie sich sagen, dass ich eine Dusche nehmen will, aber ich möchte, um duschen, nachdem ich meine Zähne putzen und Frühstück essen. Also ich weiß, ich werde nicht für mindestens 30 bis 40 Minuten wird das Dusche. Ich habe immer noch in meinem Kopf, dass ich meine Kleider vorbereiten muß, und dann die Treppe zum Bad gehe wieder nach oben, dann ausziehen und dann duschen. Dies wird jedoch nicht passieren, bis 30-40 Minuten vergangen sind. Jetzt habe ich eine PENDING Absicht zu duschen. Es ist PENDING für 30-40 Minuten.

Das ist so ziemlich der Unterschied zwischen einem Pending Intent und einem regulären Intent. Kurz gesagt:

RegIntent ular -> DOES NOT REQUIRE PENDING INTENT TO BE MADE

Ausstehende Intent -> REQUIRES A REGULAR INTENT TO BE CREATED

Intents sind von zwei Typen- Explicit und Implizite

Explicit Intent : Wenn Ihre Anwendung ist sich dessen bewusst, welche Komponente zu nennen, eine Aktion auszuführen

Implizite Intent : Wenn Ihre Anwendung ist nicht bekannt, welche Komponente genau Ihre gewünschte Aktion auszuführen. Wenn Sie einfach nur für Ex, sagen, dass Sie eine URL angezeigt werden sollen, entscheidet das System, welche Komponente die Absicht erfüllen wird.

Für mehr besser und klare Vorstellung über Intents. Vist unten Links

  1. Slidenerd.com
  2. Android Intent Tutorial
  3. Some More

Ein Pending Intent ist ein Token, das Sie zu einem gewissen App gibt eine Aktion auf Ihrem Apps Namen durchzuführen unabhängig , ob Ihre Bewerbung am Leben ist oder nicht.

Ich denke, die Dokumentation detailliert genug ist: Schwebende Intent docs .

Man denke nur an Anwendungsfälle für Pending Intents wie (Rundfunk Intents, Scheduling Alarme) und die Dokumentation wird klarer und aussagekräftiger werden.

In meinem Fall kein von oben Antworten noch google hat mir geholfen, das zu packen Konzept der PendingIntent Klasse.

Und dann fand ich dieses Video, Google I / O 2013 Beyond the Blue Dot Sitzung . In diesem Video Ex-Googler Jaikumar Ganesh erklärt, was PendingIntent ist, und dass das Ding hat mir das große Bild davon war.

Im Folgenden finden Sie nur die Transkription von oben Video ( von 15.24 ).

  

Was ist also eine anhängige Absicht?
  Es ist ein Zeichen, dass Ihre App-Prozess auf den Standort Prozess geben wird, und die Lage zu verarbeiten, um aufzuwachen Ihre App nutzen werden, wenn ein Ereignis von Interesse geschieht . Dies bedeutet also, im Grunde, dass Ihre App im Hintergrund nicht immer sein müssen laufen. Wenn etwas von Interesse geschieht, werden wir Sie aufwachen. Das spart eine Menge Batterie.

Diese Erklärung wird klarer, mit diesem Code-Snippet (die in der Sitzung des Dia enthalten ist).

PendingIntent mIntent = PendingIntent.getService(...);

mLocationClient.requestLocationUpdates(locationRequest, mIntent);

public void onHandleIntent(Intent intent) {   
    String action = intent.getAction();   
    if (ACTION_LOCATION.equals(action)) {       
        Location location = intent.getParcelableExtra(...)   
    }
}

Warum PendingIntent ist erforderlich? Ich dachte, wie

  1. Warum die empfangende Anwendung selbst die Intent nicht erstellen können oder
  2. Warum können wir nicht ein einfaches Intent für den gleichen Zweck verwendet werden.

E.g.Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

Wenn ich bluetoothIntent an eine andere Anwendung senden, die keine Berechtigung android.permission.BLUETOOTH_ADMIN hat, dass die Anwendung empfängt, kann nicht Bluetooth ermöglichen, mit startActivity(bluetoothIntent).

Die Begrenzung ist mit PendingIntent überwinden. Mit PendingIntent die empfangende Anwendung, müssen dabei nicht android.permission.BLUETOOTH_ADMIN für Bluetooth ermöglicht. Quelle .

Absicht Schwebende ist eine Absicht, die irgendwann in der Zukunft zu beginnen. Normale Absicht beginnt sofort, wenn es weitergegeben startActivity(Intent) oder StartService(Intent).

Eine zukünftige Absicht, dass andere Anwendungen verwenden können.
Und hier ist ein Beispiel einer für die Erstellung von:

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);

TAXI ANALOGIE

Intent

Intents sind für den Start Dienstleistungen üblicherweise verwendet. Zum Beispiel:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
startService(intent);

Das ist, wie wenn man ein Taxi rufen:

Myself = CurrentClass
Taxi Driver = ServiceClass

Schwebende Intent

Sie müssen so etwas verwenden:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
PendingIntent pi = PendingIntent.getService(parameter, parameter, intent, parameter);
getDataFromThirdParty(parameter, parameter, pi, parameter);

Nun ist diese dritte Partei wird den Dienst handelt in Ihrem Namen starten. Eine wirkliches Leben Analogie ist Uber oder Lyft, die beiden Taxiunternehmen sind.

Sie senden eine Anfrage für eine Fahrt bei Uber / Lyft. Sie werden dann voran gehen und einen ihrer Fahrer in Ihrem Namen nennen.

Deshalb:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass

Ein PendingIntent ist ein Zeichen, dass Sie zu einer anderen Anwendung geben (z Notification Manager, Alarm Manager oder andere 3rd-Party-Anwendungen), die diese andere Anwendung erlaubt es, die Berechtigungen Ihrer Anwendung zu verwenden, um einen vordefinierten Stück Code auszuführen. Um eine Sendung über eine anstehende Absicht ausführen erhält so eine PendingIntent über PendingIntent.getBroadcast (). Um eine Aktivität über eine anhängige Absicht führen Sie die Aktivität über PendingIntent.getActivity erhalten ().

Was ist eine Absicht?

Eine Intent ist ein bestimmte Befehl in Android, die Sie einen Befehl an das Android O senden kann etwas Bestimmtes zu tun. Denken Sie daran, wie eine Aktion, die stattfinden muss. Es gibt viele Aktionen, die so getan werden kann, eine E-Mail senden oder ein Foto zu einer E-Mail Anbringen oder sogar eine Anwendung zu starten. Die logische Workflow eine Absicht zu schaffen, ist in der Regel wie folgt: ein. Erstellen Sie das Intent b. In Intent Optionen -> Ex. welche Art von Vorsatz wir an die OS senden oder alle Attribute mit dieser Absicht, wie eine Textzeichenfolge oder etwas im Zusammenhang mit der Absicht geführt wird c. RUN die Absicht

Real Life Beispiel: Sagen wir, ich morgens aufwachen und ich „beabsichtigen“ auf die Toilette zu gehen. Ich werde zunächst auf die Toilette muß darüber nachdenken, zu gehen, aber das macht mir wirklich auf die Toilette nicht bekommen. Ich muss dann mein Gehirn sagen, zuerst aus dem Bett raus, dann auf die Toilette gehen und dann freigeben, dann gehen und meine Hände waschen, dann gehen und meine Hände wischen. Sobald ich weiß, wohin ich gehe sende ich den Befehl beginnen und mein Körper ergreift Maßnahmen.

Was ist Pending Intents?

aus dem wirklichen Leben Beispiel fort, lassen Sie sich sagen, dass ich eine Dusche nehmen will, aber ich möchte, um duschen, nachdem ich meine Zähne putzen und Frühstück essen. Also ich weiß, dass ich nicht bis mindestens 30-40 Minuten Duschen werden. Ich habe immer noch in meinem Kopf, dass ich meine Kleider vorbereiten muß, und dann die Treppe zum Bad gehe wieder nach oben, dann ausziehen und dann duschen. Dies wird jedoch nicht passieren, bis 30-40 Minuten vergangen sind. Ich habe jetzt eine PENDING Absicht zu duschen. Es ist PENDING für 30-40 Minuten.

Das ist so ziemlich der Unterschied zwischen einem Pending Intent und einem regulären Intent. Regelmäßige Intents können ohne Pending Intent jedoch um eine Pending Intent Sie zunächst einen regelmäßigen Intent-Setup haben musst, erstellen erstellt werden.

PendingIntent ist im Grunde ein Objekt, das ein anderes Intent Objekt umschließt. Dann kann es zu einer fremden Anwendung übergeben werden, in dem Sie die App das Recht sind die Gewährung der Operation durchzuführen, das heißt, führen Sie die Absicht, als ob es von Ihrer eigenen App-Prozess (gleiche Berechtigung und Identität) ausgeführt wurden. Aus Sicherheitsgründen sollten Sie immer explizit Absichten auf eine PendingIntent passieren, anstatt implizit zu sein.

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);

In einer einfachen Sprache,
 1. Eine Beschreibung eines Vorsatz und das Ziel Aktion auszuführen. Zuerst müssen Sie eine Absicht erstellen und dann müssen Sie eine bestimmte Java-Klasse übergeben, die Sie, auf die Absicht ausgeführt werden soll.
2. Sie können diese Java-Klasse aufrufen, die Ihre Klasse Action-Klasse von PendingIntent.getActivity, PendingIntent.getActivities (Context, int, Intent [], int), PendingIntent.getBroadcast (Context, int, Intent, int) und PendingIntent. getService (Context, int, Intent, int); Hier sehen Sie, dass Intent, die stammt aus dem Schritt 1 | ist 3. Sie sollten bedenken, dass ... Durch eine PendingIntent zu einer anderen Anwendung zu geben, ihr das Recht gewähren den Betrieb von Ihnen angegebenen auszuführen.

Das ist, was ich nach einer langen Lektüre gelernt.

A PendingIntent wickelt die allgemeine Absicht mit einem Token, dass Sie an ausländischen App geben mit Ihrer Erlaubnis auszuführen. Für zB:

  

Die Benachrichtigung über Ihre Musik-App kann nicht spielen / Pause die Musik, wenn Sie   nicht die PendingIntent geben auszustrahlen, weil Ihre Musik-App senden   hat READ_EXTERNAL_STORAGE Erlaubnis, die die Benachrichtigung App   nicht. Benachrichtigung ist ein Systemdienst (so ist es eine fremde app).

Wie der Name schon sagt .. PendingIntent

Sie können (tun es nach einiger Zeit) es pEnd. Es funktioniert wie die andere Absicht ..es ist ein Weg, um Ihre Aufgabe zu einer anderen App zu geben in Ihrem Namen auszuführen.

Schwebende Intent gibt eine Aktion in der Zukunft. Es ermöglicht Ihnen eine Zukunft Intent an eine andere Anwendung übergeben und ermöglichen, dass die Anwendung dieser Absicht auszuführen, als ob es die gleichen Berechtigungen wie Ihre Anwendung hatte, ob Ihre Anwendung ist immer noch rund, wenn die Absicht ist, schließlich aufgerufen wird.

Es ist ein Zeichen, dass Sie zu einer fremden Anwendung geben, die die fremde Anwendung ermöglicht es Ihre Anwendung Berechtigungen zu verwenden, um einen vordefinierten Stück Code auszuführen.

Wenn Sie die fremde Anwendung eine Intent geben, und dass die Anwendung sendet / sendet die Absicht Sie gab, werden sie die Absicht mit ihren eigenen Berechtigungen auszuführen. Aber wenn Sie stattdessen die fremde Anwendung gibt eine Pending Intent Sie Ihre eigene Erlaubnis erstellt, dass die Anwendung ausführen wird die enthaltene Intent Ihrer Anwendung Erlaubnis verwenden.

Um eine Sendung über eine anstehende Absicht auszuführen, um eine PendingIntent über PendingIntent.getBroadcast get (). Um eine Aktivität über eine anhängige Absicht führen Sie die Aktivität über PendingIntent.getActivity erhalten ().

Es ist eine Intent Aktion, die Sie ausführen möchten, aber zu einem späteren Zeitpunkt. Denken Sie daran, eine eine Absicht auf Eis setzen. Der Grund ist es nötig ist, weil eine Absicht erstellt werden muss und von einem gültigen Kontext in Ihrer Anwendung gestartet, aber es gibt bestimmte Fälle, in denen man zur Zeit nicht zur Verfügung steht die Aktion ausgeführt werden soll, weil Sie technisch außerhalb des Kontexts der Anwendung sind (die zwei gemeinsame Beispiele sind eine Aktivität aus einer Mitteilung oder eine BroadcastReceiver starten.

Durch eine PendingIntent Erstellen möchten Sie starten verwenden, zu sagen, eine Aktivität, während Sie den Kontext haben, dies zu tun (von innerhalb einer anderen Aktivität oder Service) Sie dieses Objekt um zu etwas Äußerliches, um es zu starten Teil passieren kann Ihre Anwendung in Ihrem Namen.

Ein PendingIntent stellt ein Mittel für Anwendungen zu arbeiten, auch nach ihrem Prozess beendet. Es ist wichtig zu beachten, dass auch nach der Anwendung, die die PendingIntent erstellt wird getötet, dass Intent kann noch laufen. Eine Beschreibung eines Vorsatzes und der Zielwirkung mit ihm durchzuführen. Instanzen dieser Klasse sind mit getActivity erstellt (Context, int, Intent, int), getBroadcast (Context, int, Intent, int), getService (Context, int, Intent, int); das zurückgegebene Objekt kann so in anderen Anwendungen übergeben wird, dass sie die Aktion ausführen können Sie zu einem späteren Zeitpunkt in Ihrem Namen beschrieben.

Durch eine PendingIntent zu einer anderen Anwendung zu geben, gewähren Sie das Recht, den Betrieb von Ihnen angegebenen auszuführen, als ob die anderen Anwendung selbst war (mit den gleichen Berechtigungen und Identität). Als solche sollten Sie vorsichtig sein, wie Sie die PendingIntent bauen. Oft, zum Beispiel die Basis Intent Sie den Namen der Komponente explizit festgelegt haben, um eine Ihrer eigenen Komponenten, um sicherzustellen, dass es letztlich dorthin geschickt wird und nirgendwo sonst liefern wird

Ein PendingIntent selbst ist einfach eine Referenz auf ein Zeichen vom System verwaltet die Originaldaten zu beschreiben verwendet, um es abzurufen. Dies bedeutet, dass, auch wenn die besitzende Anwendung der Prozess abgebrochen wird, die PendingIntent selbst wird verwendbar aus anderen Verfahren bleiben, die sie erhalten haben. Wenn die Erstellung Anwendung später wieder ruft die gleiche Art von PendingIntent (gleiche Operation, gleiche Intent Aktion, Daten, Kategorien und Komponenten, und gleicher Flags), wird es eine PendingIntent, die die gleichen Token erhalten, wenn diese noch gültig ist, und kann so Anruf cancel () zu entfernen.

Intent Bis ist eine Absicht, die alle Erlaubnis für andere Anwendung bietet ein besonderes Werk zu tun. Wenn die Hauptaktivität zerstört wird, nimmt Android OS die Erlaubnis von ihm zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top