Question Qu'est-ce qu'un Android PendingIntent?


Je suis un débutant à Android. J'ai lu la documentation Android mais j'ai encore besoin de plus de précisions. Quelqu'un peut-il me dire exactement ce que PendingIntent est?


442
2018-05-11 07:30


origine


Réponses:


UNE PendingIntent est un jeton que vous donnez à une application étrangère (par ex. NotificationManager, AlarmManager, Écran d'accueil AppWidgetManagerou d'autres applications tierces), qui permet à l'application étrangère d'utiliser les autorisations de votre application pour exécuter un morceau de code prédéfini.

Si vous donnez une Intention à la demande étrangère, elle exécutera votre Intent avec ses propres autorisations. Mais si vous donnez une application étrangère PendingIntent, cette application va exécuter votre Intent en utilisant la permission de votre application.


773
2018-01-27 03:24



INTENTION

Les intentions sont le mécanisme de messagerie standard dans Android qui expriment l'intention de l'utilisateur d'effectuer un certain travail. Ils vous permettent d'interagir avec d'autres composants définis par vous ou par le système d'exploitation Android.

Exemple de diffusion

  1. un message
  2. Démarrer l'appareil photo
  3. Lancer un service
  4. Lancer une activité
  5. Afficher une page Web ou une liste de contacts
  6. Composez un numéro de téléphone ou répondez à un appel téléphonique

    Ils sont utilisés dans les deux sens

1) par vous d'appeler un composant

2) par le système pour vous informer de certains événements.

Le flux de travail logique de la création d'une intention est généralement le suivant:

  • Créer l'intention
  • b. Ajouter des options d'intention-> Ex. le type d'intention que nous envoyons au système d'exploitation ou les attributs associés à cette intention, comme une chaîne de texte ou un élément transmis avec l'intention 
  • c. Exécuter l'intention

Exemple de la vie réelle: Disons que je me réveille le matin et je "INTEND"aller aux toilettes. Je dois d'abord penser à aller aux toilettes, mais cela ne m'amène pas vraiment aux toilettes. Je devrai alors dire à mon cerveau de sortir du lit en premier, puis de marcher jusqu'au Je vais ensuite me laver les mains, puis je vais essuyer mes mains, une fois que je sais où je vais, j'envoie la commande pour commencer et mon corps prend des mesures.

PENDINGINTENT

UNE PendingIntent spécifie une action à prendre dans le futur. Il vous permet de passer une future intention à une autre application et de permettre à cette application d'exécuter cette intention comme si elle avait le same permissions as your applicationIndiquez si votre application est toujours présente ou non lorsque l’intention est finalement invoquée. C’est un jeton que vous donnez à une application étrangère qui permet à l’application étrangère d’utiliser les autorisations de votre application pour exécuter un morceau de code prédéfini.

En donnant un PendingIntent à une autre application, vous lui accordez le droit d'effectuer l'opération que vous avez spécifiée comme si l'autre application était vous-même (avec les mêmes autorisations et l'identité). En tant que tel, you should be careful about how you build the  PendingIntent: souvent, par exemple, l’intention de base que vous fournissez aura le nom du composant explicitement défini sur l’un de vos propres composants, pour s’assurer qu’il est finalement envoyé là et nulle part ailleurs.

C'est une action d'intention que vous souhaitez effectuer, mais plus tard. Pensez-y une mise sur la glace. La raison pour laquelle il est nécessaire est qu’une intention doit être créée et lancée à partir d’une Context dans votre application, mais il existe certains cas où l'un n'est pas disponible au moment où vous souhaitez exécuter l'action car vous êtes techniquement en dehors du contexte de l'application (les deux exemples courants lancent une activité à partir d'une notification ou d'un BroadcastReceiverEn créant un PendingIntent vous voulez utiliser pour lancer, par exemple, une activité pendant que vous avez le Context pour le faire (depuis l'intérieur d'une autre activité ou service)

Poursuivant de l'exemple de la vie réelle: disons que je veux prendre une douche, mais je veux prendre une douche APRÈS je me brosse les dents et je déjeune. Je sais donc que je ne vais pas me doucher avant au moins 30 à 40 minutes. J'ai toujours dans la tête que je dois préparer mes vêtements, puis remonter les escaliers vers la salle de bain, puis me déshabiller puis prendre une douche. Cependant, cela n'arrivera pas avant 30-40 minutes. J'ai maintenant l'intention de prendre une douche en attendant. Il est en attente de 30 à 40 minutes.

C'est à peu près la différence entre une intention en attente et une intention régulière. En bref:

Intention régulière -> DOES NOT REQUIRE PENDING INTENT TO BE MADE

Intention en attente -> REQUIRES A REGULAR INTENT TO BE CREATED

Les intentions sont de deux types Explicite et Implicite 

Intention explicite: Lorsque votre application est consciente du composant à appeler pour effectuer une action

Intention implicite: Lorsque votre application ne sait pas quel composant peut effectuer exactement l'action souhaitée. Pour Ex, si vous dites simplement que vous voulez afficher une URL, le système décide quel composant remplira l'intention.

Pour une idée plus précise et plus claire des intentions. Vist ci-dessous des liens

  1. Slidenerd.com
  2. Tutoriel d'intention Android
  3. Un peu plus

230
2018-04-08 07:42



Une intention en attente est un jeton que vous donnez à une application pour effectuer une action au nom de vos applications indépendamment de savoir si votre processus de demande est en vie ou non.

Je pense que la documentation est suffisamment détaillée: Intentions en attente docs.

Pensez simplement aux cas d'utilisation pour les intentions en suspens comme (Intentions de diffusion, planification des alarmes) et la documentation deviendra plus claire et plus significative.


44
2018-05-11 09:29



Dans mon cas, aucune des réponses ci-dessus ni la documentation officielle de google m'a aidé à saisir le concept de PendingIntent classe.

Et puis j'ai trouvé cette vidéo, Google I / O 2013, Au-delà du point bleu session. Dans cette vidéo, l'ex-googler Jaikumar Ganesh explique ce que PendingIntent est, et c'était la chose m'a donné la grande image de cela.

Ci-dessous se trouve la transcription de la vidéo ci-dessus (à partir de 15h24).

Alors, quelle est l'intention en attente? 

  C'est un jeton que votre processus d'application donnera au processus de localisation, et le processus de localisation l'utilisera pour réveiller votre application lorsqu'un événement d'intérêt se produit. Cela signifie donc que votre application en arrière-plan ne doit pas toujours être en cours d'exécution. Quand quelque chose d'intéressant arrive, nous allons vous réveiller. Cela économise beaucoup de batterie.

Cette explication devient plus claire avec cet extrait de code (qui est inclus dans la diapositive de la session).

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

29
2017-12-26 10:03



Pourquoi PendingIntent est-il requis? Je pensais comme

  1. Pourquoi l'application de réception elle-même ne peut-elle pas créer Intent ou
  2. Pourquoi nous ne pouvons pas utiliser un simple Intent dans le même but.

Par exemple.Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

Si j'envoie bluetoothIntent à une autre application, qui n'a pas la permission android.permission.BLUETOOTH_ADMIN, cette application de réception ne peut pas activer Bluetooth avec startActivity(bluetoothIntent).

La limitation est surmontée en utilisant PendingIntent. Avec PendingIntent l'application de réception, n'a pas besoin d'avoir android.permission.BLUETOOTH_ADMIN pour activer Bluetooth. La source.


19
2017-11-11 17:27



L'intention en suspens est une intention qui commencera à un moment donné dans le futur. L'intention normale commence immédiatement lorsqu'elle est transmise à startActivity(Intent) ou StartService(Intent).


15
2018-04-17 11:54



Une intention future que d'autres applications peuvent utiliser.
Et voici un exemple pour en créer un:

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

12
2017-12-16 16:40



Un PendingIntent est un jeton que vous donnez à une autre application (par exemple, Gestionnaire de notifications, Gestionnaire d'alarmes ou autres applications tierces), qui permet à cette autre application d'utiliser les autorisations de votre application pour exécuter un morceau de code prédéfini. Pour effectuer une diffusion via une intention en attente, obtenez un PendingIntent via PendingIntent.getBroadcast (). Pour effectuer une activité via une intention en attente, vous recevez l'activité via PendingIntent.getActivity ().


9
2018-01-31 06:16



TAXI ANALOGIQUE

Intention

Les intentions sont généralement utilisées pour démarrer les services. Par exemple:

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

C'est comme quand vous appelez un taxi:

Myself = CurrentClass
Taxi Driver = ServiceClass

Intention en attente

Vous devrez utiliser quelque chose comme ceci:

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

Maintenant, cette tierce partie commencera le service agissant en votre nom. Une analogie de la vie réelle est Uber ou Lyft qui sont les deux compagnies de taxi.

Vous envoyez une demande de trajet à Uber / Lyft. Ils iront ensuite en appelant l'un de leurs chauffeurs en votre nom.

Donc:

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

9
2018-05-13 22:25