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?

1026voto

Lie Ryan Punkte 57966

A PendingIntent ist ein Token, das Sie einer fremden Anwendung geben (z. B. NotificationManager , AlarmManager , Startbildschirm AppWidgetManager oder andere Anwendungen von Drittanbietern), die ermöglicht es der Fremdanwendung, die Berechtigungen Ihrer Anwendung zu nutzen, um einen vordefinierten Code auszuführen .

Wenn Sie der fremden Anwendung einen Intent geben, wird sie Ihre Intent mit ihren eigenen Berechtigungen. Wenn Sie jedoch der Fremdanwendung eine PendingIntent wird diese Anwendung Ihre Intent mit der Genehmigung Ihrer Anwendung.

5 Stimmen

Außer für Benachrichtigungen, wo sonst haben Sie die Verwendung von pendingIntents gesehen? Ich glaube, ich habe gesehen, dass nur Benachrichtigungen es verwenden...

0 Stimmen

@LieRyan oh sorry für das. kann ich bitte löschen Sie den Beitrag, den ich geschrieben habe (und Sie Ihre)? auch, wissen Sie von anderen Klassen, die PendingIntent verwenden?

15 Stimmen

@LieRyan diese Antwort ist besser als developer.google Erklärung über pendingintent danke dafür

70voto

kiranpradeep Punkte 10192

Warum ist PendingIntent erforderlich? Ich habe gedacht, dass

  1. Warum kann die empfangende Anwendung nicht selbst die Intent ou
  2. Warum wir nicht einfach eine Intent zu demselben Zweck.

z.B. Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

Wenn ich bluetoothIntent zu einer anderen Anwendung, die nicht die Erlaubnis hat android.permission.BLUETOOTH_ADMIN dass die empfangende Anwendung Bluetooth nicht mit startActivity(bluetoothIntent) .

Diese Einschränkung wird überwunden durch PendingIntent . Mit PendingIntent die empfangende Anwendung, muss nicht über android.permission.BLUETOOTH_ADMIN zur Aktivierung von Bluetooth. Quelle .

6 Stimmen

Ihr bluetoothIntent-Beispiel ist wirklich wertvoll. Danke

2 Stimmen

@Kiran - Wenn die empfangende Anwendung Bluetooth einschalten kann (mithilfe von Pending Intent), warum hat diese Anwendung diese Berechtigung dann nicht in ihr Manifest aufgenommen? Es ist so, als würde ich eine App erstellen, die einen Anruf tätigen kann, aber ich füge die Berechtigung CALL_PHONE nicht ein, weil ich möchte, dass die andere App mir einen Pending Intent sendet, um diesen Anruf zu tätigen. Ist es das, was Sie sagen wollen?

2 Stimmen

@CopsOnRoad Die empfangende App des PendingIntent kann eine allgemeine App sein, die jede beliebige Anfrage empfängt und die Anfrage im Namen des Anfragenden ausführt. Ihre Rolle ist nur die eines Mittelsmannes, daher hat sie nicht alle Berechtigungen. Ein Beispiel für diese Art von Vermittler-Apps ist der Benachrichtigungsmanager, der aus einer Benachrichtigung heraus beliebige Anwendungen starten kann, ohne über die entsprechenden Rechte zu verfügen.

56voto

Samuh Punkte 35993

Ein Pending Intent ist ein Token, das Sie einer Anwendung geben, damit diese eine Aktion im Namen Ihrer Anwendungen durchführt. ungeachtet dessen ob Ihr Bewerbungsverfahren lebendig ist oder nicht.

Ich denke, die Dokumentation ist ausführlich genug: Ausstehende Absichtserklärungen .

Denken Sie einfach an Anwendungsfälle für Pending Intents wie (Broadcasting Intents, Scheduling Alarms) und die Dokumentation wird klarer und sinnvoller.

0 Stimmen

Ich denke, Intent ist auch eine Art Token, das wir einer anderen Anwendung geben, damit sie eine Aktion im Namen unserer Anwendung durchführt. Der einzige Unterschied zwischen einem Pending Intent und einem Intent ist also die Lebensdauer unserer Anwendung?

54voto

김준호 Punkte 15507

In meinem Fall ist keine der oben genannten Antworten noch die offizielle Dokumentation von Google hat mir geholfen, das Konzept der PendingIntent Klasse.

Und dann habe ich dieses Video gefunden, Google I/O 2013, Jenseits des Blauen Punkts Sitzung . In diesem Video erklärt der Ex-Googler Jaikumar Ganesh, was PendingIntent ist, und das war es, was mir das Gesamtbild der Sache vermittelte.

Nachfolgend nur die Transkription des obigen Videos ( ab 15:24 ).

Was ist also ein schwebender Vorsatz?

Es handelt sich um ein Token, das Ihr Anwendungsprozess an den Standortprozess weitergibt, und der Ortungsprozess wird ihn verwenden, um Ihre Anwendung aufzuwecken, wenn ein interessantes Ereignis eintritt . Das bedeutet im Grunde, dass Ihre App im Hintergrund nicht immer laufen muss. Wenn etwas Interessantes passiert, werden wir Sie aufwecken. Das spart eine Menge Akku.

Diese Erklärung wird durch den folgenden Codeschnipsel (der in der Folie der Sitzung enthalten ist) noch deutlicher.

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(...)   
    }
}

0 Stimmen

Ich stimme zu, es ist ganz einfach und klar zu verstehen. Aber es sagt uns nichts über die Erlaubnis, die PendingIntent an andere Apps erteilt.

31voto

Arun P Punkte 301

Ein schwebendes Vorhaben ist ein Vorhaben, das irgendwann in der Zukunft beginnen wird. Ein normaler Intent startet sofort, wenn er an startActivity(Intent) o StartService(Intent) .

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