Qu’est-ce qu’un Android PendingIntent?

Je suis un débutant sur 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 qu’est un PendingIntent ?

Un PendingIntent est un jeton que vous donnez à une application étrangère (par exemple, NotificationManager , AlarmManager , Home Screen AppWidgetManager ou d’autres applications tierces), qui permet à l’application étrangère d’utiliser les permissions de votre application pour exécuter un morceau de code prédéfini .

Si vous donnez une intention à l’application étrangère, elle exécutera votre Intent avec ses propres permissions. Mais si vous atsortingbuez à l’application étrangère un PendingIntent , cette application exécutera votre Intent utilisant la permission de votre application.

INTENTION

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

Exemple:

  1. Diffuser un message
  2. Démarrer la caméra
  3. Lancer un service
  4. Lancer une activité
  5. Afficher une page Web ou une liste de contacts
  6. Composer un numéro de téléphone ou répondre à 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 stream de travail logique de la création d’une intention est généralement le suivant:

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

Exemple de la vraie vie: Disons que je me lève le matin et que je ” INTENSE ” à aller aux canvasttes. Je dois d’abord penser à aller aux canvasttes, mais cela ne m’amène pas vraiment aux canvasttes. Je devrai ensuite dire à mon cerveau de sortir du lit en premier, puis de marcher jusqu’aux canvasttes, puis de relâcher, puis de me laver les mains, puis d’aller me nettoyer les mains. Une fois que je sais où je vais, j’envoie la commande pour commencer et mon corps prend des mesures.

PENDINGINTENT

Un PendingIntent spécifie une action à entreprendre dans le futur. Il vous permet de transmettre une future intention à une autre application et d’autoriser cette application à exécuter cet objective comme si elle disposait des same permissions as your application , que votre application soit toujours présente ou non lors de l’appel final. C’est un jeton que vous donnez à une application étrangère qui permet à l’application étrangère d’utiliser les permissions de votre application pour exécuter un morceau de code prédéfini.

En atsortingbuant un PendingIntent à une autre application, vous lui PendingIntent 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 permissions et identités). En tant que tel, vous devez faire attention à la façon dont vous construisez le 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.

C’est une action d’intention que vous souhaitez effectuer mais ultérieurement. Pensez-y une mise sur la glace. La raison en est que le but doit être créé et lancé à partir d’un Context valide 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 hors du contexte de l’application deux exemples courants sont le lancement d’une activité à partir d’une notification ou d’un BroadcastReceiver En créant un PendingIntent vous souhaitez utiliser pour lancer, par exemple, une activité alors que vous avez le Context pour le faire (à partir d’une autre activité ou service)

Poursuivant l’exemple de la vie réelle: disons que je veux prendre une douche mais que je veux prendre une douche APRÈS que je me brosse les dents et que je prenne mon petit-déjeuner. Donc, je sais que je ne vais pas me doucher pendant au moins 30 à 40 minutes. J’ai encore dans la tête que je dois préparer mes vêtements, puis remonter les escaliers vers la salle de bains, puis me déshabiller puis me doucher. Cependant, cela n’arrivera que 30 ou 40 minutes plus tard. J’ai maintenant l’intention de prendre une douche. 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 cours -> REQUIRES A REGULAR INTENT TO BE CREATED

Les intentions sont de deux types: explicites et implicites

Intention explicite : lorsque votre application a connaissance du composant à appeler pour effectuer certaines actions

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 souhaitez 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

Une intention en attente est un jeton que vous donnez à certaines applications pour effectuer une action au nom de vos applications, que votre processus de candidature soit actif ou non.

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

Pensez aux cas d’utilisation des intentions en attente telles que les intentions de diffusion, les alarmes de planification et la documentation deviendra plus claire et plus significative.

Dans mon cas, aucune des réponses ci-dessus ni la documentation officielle de Google ne m’ont aidé à saisir le concept de la classe PendingIntent .

Et puis j’ai trouvé cette vidéo, Google I / O 2013, la session Beyond the Blue Dot . Dans cette vidéo, l’ex-googler Jaikumar Ganesh explique ce qu’est PendingIntent , et c’est ce qui m’a permis d’en avoir une vue d’ensemble.

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

Alors, quelle est une intention en suspens?

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 intéressant se produit . Donc, cela signifie que votre application en arrière-plan ne doit pas toujours être en cours d’exécution. Lorsque quelque chose d’intéressant se produit, nous vous réveillerons. 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) { Ssortingng action = intent.getAction(); if (ACTION_LOCATION.equals(action)) { Location location = intent.getParcelableExtra(...) } } 

Pourquoi PendingIntent est-il requirejs? Je pensais comme

  1. Pourquoi l’application récepsortingce elle-même ne peut pas créer l’ Intent ou
  2. Pourquoi nous ne pouvons pas utiliser une Intent simple dans le même but.

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

Si j’envoie bluetoothIntent à une autre application sans autorisation android.permission.BLUETOOTH_ADMIN , cette application récepsortingce ne peut pas activer Bluetooth avec startActivity(bluetoothIntent) .

La limitation est surmontée en utilisant PendingIntent . Avec PendingIntent l’application récepsortingce n’a pas besoin d’ android.permission.BLUETOOTH_ADMIN pour activer Bluetooth. Source

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

Une future intention 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); 

ANALOGIE DU TAXI

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 lancera le service agissant en votre nom. Uber ou Lyft, deux compagnies de taxis, sont une vraie analogie.

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 

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

Qu’est-ce qu’une intention?

Une intention est une commande spécifique dans Android qui vous permet d’envoyer une commande au système d’exploitation Android pour faire quelque chose de spécifique. Pensez-y comme une action qui doit avoir lieu. De nombreuses actions peuvent être effectuées, telles que l’envoi d’un courrier électronique ou la connexion d’une photo à un courrier électronique ou même le lancement d’une application. Le stream de travail logique de création d’une intention est généralement le suivant: a. Créer l’intention b. Ajouter les options d’intention -> Ex. le type d’intention que nous envoyons au système d’exploitation ou les atsortingbuts associés à cette intention, tels qu’une chaîne de texte ou quelque chose qui est transmis avec l’intention c. Exécuter l’intention

Exemple de la vraie vie: Disons que je me lève le matin et que je “INTENSE” à aller aux canvasttes. Je dois d’abord penser à aller aux canvasttes, mais cela ne m’amène pas vraiment aux canvasttes. Je devrai ensuite dire à mon cerveau de sortir du lit en premier, puis de marcher jusqu’aux canvasttes, puis de relâcher, puis de me laver les mains, puis d’aller me nettoyer les mains. Une fois que je sais où je vais, j’envoie la commande pour commencer et mon corps prend des mesures.

Qu’est-ce que les intentions en attente?

Poursuivant l’exemple réel, disons que je veux prendre une douche mais que je veux prendre une douche APRÈS que je me brosse les dents et que je prenne mon petit-déjeuner. Donc, je sais que je ne vais pas me doucher avant au moins 30 à 40 minutes. J’ai encore dans la tête que je dois préparer mes vêtements, puis remonter les escaliers vers la salle de bains, puis me déshabiller puis me doucher. Cependant, cela n’arrivera que 30 à 40 minutes plus tard. J’ai maintenant l’intention de prendre une douche. C’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. Les intentions régulières peuvent être créées sans intention en attente, mais pour créer une intention en attente, vous devez d’abord configurer votre intention.

Dans un langage facile,
1. Une description d’une action d’intention et de cible à effectuer. Vous devez d’abord créer une intention, puis passer une classe Java spécifique que vous souhaitez exécuter, à l’intention.
2. Vous pouvez appeler ces classes Java qui sont votre classe d’action de classe par PendingIntent.getActivity, PendingIntent.getActivities (Context, int, Intent [], int), PendingIntent.getBroadcast (Context, int, Intent, int) et PendingIntent. getService (Context, int, Intent, int); Ici vous voyez cette intention qui vient de l’étape 1
3. Vous devez garder à l’esprit que … En atsortingbuant un PendingIntent à une autre application, vous lui accordez le droit d’effectuer l’opération que vous avez spécifiée.

C’est ce que j’ai appris après une longue lecture.

PendingIntent est essentiellement un object qui PendingIntent un autre object Intent . Ensuite, il peut être transmis à une application étrangère où vous accordez à cette application le droit d’effectuer l’opération, c’est-à-dire exécuter l’intention comme si elle avait été exécutée à partir du processus de votre propre application (même autorisation et identité). Pour des raisons de sécurité, vous devez toujours transmettre les intentions explicites à un PendingIntent plutôt qu’être implicite.

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

Comme son nom l’indique .. PendingIntent

vous pouvez le faire (le faire après un certain temps) Cela fonctionne comme l’autre intention .. c’est une façon de donner votre tâche à une autre application pour effectuer en votre nom.

Un PendingIntent enveloppe l’intention générale avec un jeton que vous donnez à une application étrangère pour qu’elle s’exécute avec votre permission. Pour par exemple:

La notification de votre application musicale ne peut pas lire / mettre en pause la musique si vous n’avez pas donné l’ PendingIntent à PendingIntent car votre application musicale dispose de l’autorisation READ_EXTERNAL_STORAGE que l’application de notification ne permet pas. La notification est un service système (c’est donc une application étrangère).

PendingIntent est essentiellement un object qui encapsule un autre object Intent. Ensuite, il peut être transmis à une application étrangère où vous accordez à cette application le droit d’effectuer l’opération, c’est-à-dire exécuter l’intention comme si elle avait été exécutée à partir du processus de votre propre application (même autorisation et identité). En atsortingbuant 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 permissions et identités).

Une intention en attente spécifie une action à entreprendre dans le futur. Il vous permet de transmettre une future intention à une autre application et d’autoriser cette application à exécuter cet objective comme si elle disposait des mêmes permissions que votre application, que votre application soit toujours présente ou non lors de l’appel final.

C’est un jeton que vous donnez à une application étrangère qui permet à l’application étrangère d’utiliser les permissions de votre application pour exécuter un morceau de code prédéfini.

Si vous donnez une intention à l’application étrangère et que cette application envoie / diffuse l’intention que vous avez donnée, elle exécutera l’intention avec ses propres permissions. Mais si, au lieu de cela, vous donnez à l’application étrangère une intention en attente que vous avez créée en utilisant votre propre autorisation, cette application exécutera l’Intention contenue en utilisant la permission de votre application.

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

C’est une action d’intention que vous souhaitez effectuer, mais plus tard. Pensez-y une mise sur la glace. La raison en est que le but doit être créé et lancé à partir d’un contexte valide 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 hors du contexte de l’application deux exemples courants sont le lancement d’une activité à partir d’une notification ou d’un BroadcastReceiver.

En créant un PendingIntent que vous souhaitez utiliser pour lancer, par exemple, une activité alors que vous avez le contexte pour le faire (depuis une autre activité ou un autre service), vous pouvez transmettre cet object à un élément externe. en votre nom.

Un PendingIntent permet aux applications de fonctionner même après la fin de leur processus. Il est important de noter que même après la suppression de l’application qui a créé le PendingIntent, cette intention peut toujours être exécutée. Une description d’une action d’intention et de cible à effectuer avec elle. Les instances de cette classe sont créées avec getActivity (Context, int, Intent, int), getBroadcast (Context, int, Intent, int), getService (Context, int, Intent, int); L’object renvoyé peut être transmis à d’autres applications afin qu’elles puissent effectuer ultérieurement l’action que vous avez décrite en votre nom.

En atsortingbuant 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 permissions et identités). En tant que tel, vous devez faire attention à la façon dont vous construisez le 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.

Un PendingIntent lui-même est simplement une référence à un jeton conservé par le système décrivant les données d’origine utilisées pour le récupérer. Cela signifie que, même si le processus de son application est détruit, le PendingIntent lui-même restra utilisable à partir des autres processus qui lui ont été donnés. Si l’application de création récupère ultérieurement le même type de PendingIntent (même opération, même action d’intention, données, catégories et composants et mêmes indicateurs), elle recevra un PendingIntent représentant le même jeton si cela est toujours valide, et peut appelez donc cancel () pour le supprimer.

L’intention en attente est une intention qui fournit toutes les permissions à une autre application pour effectuer une œuvre particulière. Lorsque l’activité principale est détruite, Android OS en récupère l’autorisation.

PendingIntent est une enveloppe d’intention. L’application étrangère qui reçoit le PendingIntent ne connaît pas le contenu de Intent qui est encapsulé par PendingIntent. La mission de l’application étrangère est de renvoyer l’intention au propriétaire lorsque certaines conditions sont remplies (par exemple: alarme avec planification ou notification par clic …). Les conditions sont données par le propriétaire mais traitées par une application étrangère (par exemple: alarme, notification).

Si une application étrangère envoie une intention à votre application, cela signifie que l’application étrangère connaît le contenu de l’intention. et l’application étrangère prend la décision d’envoyer l’intention, alors votre application doit traiter l’intention de répondre à certaines conditions votre application obtenir des ressources de performance du système.