Qu'est ce qu'un Android PendingIntent?

je suis un débutant pour Android. J'ai lu la Documentation sur Android mais j'ai encore besoin de plus de précisions. Quelqu'un peut me dire ce qu'est exactement un PendingIntent ?

452
demandé sur edwoollard 2010-05-11 11:30:04

18 réponses

Un PendingIntent est un jeton que vous donnez à une demande étrangère (par exemple, NotificationManager , AlarmManager , l'Écran d'Accueil AppWidgetManager , ou d'autres applications 3ème partie), qui permet à l'étranger d'application pour l'utilisation de votre application, les autorisations d'exécution d'un prédéfini morceau de code .

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

784
répondu Lie Ryan 2018-01-04 10:39:13

intention

Intents sont le mécanisme de messagerie standard dans Android qui exprime 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:

  1. diffuser un message
  2. Démarrer l'appareil photo
  3. Démarrer 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 pour appeler un composant

2) par le système pour vous informer d'un événement.

le flux logique de création l'intention est habituellement la suivante:

  • Créer de l'Intention
  • B. Ajouter les options D'intention - > ex. quel type d'intention nous envoyons à L'EO ou tout attribut associé à cette intention, tel qu'une chaîne de texte ou quelque chose qui est transmis avec l'intention
  • c. EXÉCUTEZ l'Intention

exemple de la vie réelle: disons que je me réveille le matin et je " intention " d'aller aux toilettes. Je vais D'abord penser à aller aux toilettes, mais ça ne m'amène pas vraiment aux toilettes. Je devrai alors dire à mon cerveau de sortir du lit d'abord, puis de marcher jusqu'aux toilettes, puis de me relâcher, puis d'aller me laver les mains, puis d'aller m'essuyer les mains. Une fois que je sais où je vais, j'envoie l'ordre de commencer et mon corps prend des mesures.

PENDINGINTENT

Un PendingIntent spécifie l'action à entreprendre dans l'avenir. Il vous permet de transmettre une intention future à une autre application et de permettre à cette application d'exécuter cette intention comme si elle avait le same permissions as your application , que votre application est toujours autour ou non lorsque l'intention est éventuellement invoquée. C'est un token que vous donnez à une application étrangère qui permet à l'application étrangère d'utiliser les permissions de votre application pour exécuter un prédéfinis morceau de code.

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 permissions et identité). En tant que tel, vous devriez être prudent sur 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 à l'un de vos propres composants, pour s'assurer qu'il est en fin de compte envoyé là-bas et nulle part ailleurs.

il s'agit d'une action intentionnelle que vous souhaitez effectuer, mais à un moment ultérieur. Pensez - y comme une intention de mettre de la glace. La raison pour laquelle il est nécessaire est parce qu'une intention doit être créée et lancée à partir d'un Context valide dans votre demande, mais il ya certains cas où une N'est pas disponible au moment où vous voulez exécuter l'action parce que vous êtes techniquement en dehors du contexte de la demande (les deux exemples communs sont le lancement d'une Activité à partir d'une Notification ou d'un BroadcastReceiver .En créant un PendingIntent vous voulez utiliser pour lancer, disons, une activité alors que vous avez le Context pour le faire (de l'intérieur d'une autre activité ou Service)

suite de l'exemple de la vraie vie: disons que je veux prendre une douche, mais je veux prendre une douche après que je me suis brossé les dents et manger le petit déjeuner. Donc je sais que je ne me doucherai pas avant au moins 30-40 minutes. J'ai encore dans ma tête que je dois préparer mes vêtements, et puis remontez les escaliers jusqu'à la salle de bain, puis déshabillez-vous et prenez une douche. Toutefois, cela ne se produira pas avant que 30 à 40 minutes se soient écoulées. Maintenant, j'ai une ATTENTE de l'intention de douche. Il est en ATTENTE pendant 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

En Attente D'Intention - > REQUIRES A REGULAR INTENT TO BE CREATED

les Intentions sont de deux types - explicite et implicite

intention explicite : lorsque votre application est au courant du composant à appeler pour effectuer une action

intention implicite : lorsque votre application ne sait pas quel composant peut effectuer exactement l'action désirée. Par exemple, si vous dites simplement que vous voulez afficher une URL, le système composante permettra de réaliser l'intention.

Pour mieux et d'idée claire sur ses Intentions. Voir les liens ci-dessous

  1. Slidenerd.com
  2. Tutoriel Sur Android
  3. Un Peu Plus
234
répondu Shakeeb Ayaz 2018-09-17 04:50:52

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

je pense que la documentation est suffisamment détaillée: en attente D'intention docs .

il suffit de penser à des cas D'utilisation pour les intentions en attente comme (les intentions de radiodiffusion, les alarmes de programmation) et la documentation deviendra plus claire et significatif.

45
répondu Samuh 2018-01-04 00:55:45

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

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 qu'est PendingIntent , et c'est ce qui m'a donné une vue d'ensemble.

ci-dessous est juste transcription de la vidéo ci-dessus ( de 15:24 ).

alors qu'est-ce qu'une intention en attente?



C'est un jeton que votre application sera confiée à l'emplacement processus, et l'emplacement processus de l'utiliser pour réveiller votre application lorsqu'un événement d'intérêt qui se passe . Donc, cela signifie que votre application dans le arrière-plan ne doit pas être toujours en cours d'exécution. Quand quelque chose d'intéressant arrivera, 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) {   
    String action = intent.getAction();   
    if (ACTION_LOCATION.equals(action)) {       
        Location location = intent.getParcelableExtra(...)   
    }
}
30
répondu 김준호 2014-12-26 10:03:08

pourquoi un pendentif est-il nécessaire ? je pensais comme

  1. pourquoi la demande réceptrice elle-même ne peut pas créer les Intent ou
  2. pourquoi nous ne pouvons pas utiliser un simple Intent dans le même but.

e. g. 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 , que l'application réceptrice ne peut pas activer Bluetooth avec startActivity(bluetoothIntent) .

la limitation est surmontée en utilisant PendingIntent . Avec PendingIntent l'application de réception, ne doit pas avoir android.permission.BLUETOOTH_ADMIN pour permettre Bluetooth. Source .

22
répondu Kiran 2018-01-04 08:13:52

en attente d'intention est une intention qui débutera à un moment donné dans l'avenir. L'intention normale commence immédiatement lorsqu'elle est transmise à startActivity(Intent) ou StartService(Intent) .

16
répondu Arun P 2018-01-04 07:32:00

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);
13
répondu WhereDatApp.com 2014-05-08 13:22:41

TAXI ANALOGY

intention

les Intentions sont généralement utilisés pour le démarrage des 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

En Instance D'Intention

Vous aurez besoin d'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 ce troisième partie démarre le service agissant en votre nom. Une vraie analogie est Uber ou Lyft qui sont les deux compagnies de taxi.

vous envoyez une demande pour un tour à Uber/Lyft. Ils appelleront ensuite un de leurs chauffeurs en votre nom.

donc:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass
10
répondu Akshayraj Kore 2015-07-06 13:45:42

un pendentif est un token que vous donnez à une autre application (par exemple Notification Manager, Alarm Manager ou d'autres applications tierces), ce 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 donc un PendingIntent via PendingIntent.getBroadcast (). Pour effectuer une activité via une intention en attente vous recevez l'activité via PendingIntent.getActivity ().

9
répondu srinu 2012-01-31 06:16:33

Qu'est-ce qu'une intention?

Une Intention est une commande spécifique à Android qui vous permet d'envoyer une commande à l'OS Android pour faire quelque chose de spécifique. Vois ça comme une action qui doit avoir lieu. Il y a beaucoup d'actions qui peuvent être faites comme envoyer un email, ou attacher une photo à un email ou même lancer une application. Le déroulement logique de la création d'une intention est généralement comme suit:: un. Créer l'Intention B. Ajouter des options D'intention - > p. ex. ce type de intention que nous envoyons à L'EO ou tout attribut associé à cette intention, comme une chaîne de texte ou quelque chose qui est transmis avec l'intention c. EXÉCUTEZ l'Intention

exemple de la vie réelle: disons que je me réveille le matin et que j'ai "L'intention" d'aller aux toilettes. Je vais D'abord penser à aller aux toilettes, mais ça ne m'amène pas vraiment aux toilettes. Je devrai alors dire à mon cerveau de sortir du lit d'abord, puis marcher jusqu'aux toilettes, et puis relâcher, puis va me laver les mains, puis va m'essuyer les mains. Une fois que je sais où je vais, j'envoie l'ordre de commencer et mon corps prend des mesures.

qu'est-Ce que l'Attente d'Intentions?

pour reprendre l'exemple de la vraie vie, disons que je veux prendre une douche mais que je veux prendre une douche après m'être brossé les dents et avoir mangé le petit déjeuner. Donc je sais que je ne me doucherai pas avant au moins 30-40 minutes. J'ai encore dans ma tête que j'ai besoin de préparer mes vêtements, puis marcher jusqu'à l'escalier arrière pour la salle de bain, puis se déshabiller et ensuite douche. Cependant cela ne se produira pas jusqu'à 30-40 minutes ont passé. Maintenant, j'ai une ATTENTE de l'intention de douche. Il est en ATTENTE pendant 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 avoir une configuration D'intention régulière.

7
répondu Narendra Motwani 2014-05-01 05:45:46

dans une langue facile,

1. Une description de L'intention et de L'action cible à accomplir. Vous devez d'abord créer une intention et ensuite vous devez passer un spécifique de la classe java qui vous voulez exécuter, à l'Intention.

2. Vous pouvez appeler cette classe java qui est votre classe d'action de groupe par PendingIntent.get activity, PendingIntent.getActivities(Contexte, int, l'Intention[], int), PendingIntent.getBroadcast(Contexte, int, Intent, int), et PendingIntent.la méthode getService(Contexte, int, Intent, int); Ici vous voyez cette intention qui vient de l'étape 1

3. Vous devez garder à l'esprit that...By donner un PendingIntent à une autre application, vous accordant le droit d'effectuer l'opération que vous avez spécifié.

Qu'est ce que j'ai appris après une longue lecture.

4
répondu Omar Faroque Anik 2015-03-03 20:21:24

PendingIntent est fondamentalement un objet qui enveloppe un autre Intent objet. Ensuite, il peut être passé à une application étrangère où vous accordez à cette application le droit d'effectuer l'opération, C.-à-d., exécuter l'intention comme si elle a été exécutée à partir de votre propre processus d'application (même permission et identité). Pour des raisons de sécurité, vous devriez toujours passer des intentions explicites à un PendingIntent plutôt que d'être implicite.

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);
2
répondu Gowtham Subramaniam 2017-11-09 05:35:59

Comme son nom l'indique .. PendingIntent

vous pouvez pend(faire après un certain temps). Il fonctionne comme l'autre intention ..il est un moyen de donner votre tâche à une autre application à effectuer en votre nom.

1
répondu Xar E Ahmer 2014-05-23 13:37:18

un pendentif enveloppe l'intention générale avec un token que vous donnez à app étrangère à exécuter avec votre permission. Par exemple:

la notification de votre application de musique ne peut pas jouer/mettre en pause la musique si vous n'a pas donné le PendingIntent à envoyer diffusion parce que votre application de musique a l'autorisation READ_EXTERNAL_STORAGE que la notification appose Non. Notification est un service système (donc c'est une application étrangère).

1
répondu Ashish Rawat 2016-08-23 11:47:27

PendingIntent est essentiellement un objet qui enveloppe un autre objet D'intention. Ensuite, il peut être passé à une application étrangère où vous accordez à cette application le droit d'effectuer l'opération, C.-à-d., exécuter l'intention comme si elle a été exécutée à partir de votre propre processus d'application (même permission et identité). 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 permissions et de l'identité).

1
répondu Sharanjeet Kaur 2017-11-14 06:50:22

A en instance D'intention spécifie une action à prendre à l'avenir. Il vous permet de transmettre une intention future à une autre application et de permettre à cette application d'exécuter cette intention comme si elle avait les mêmes permissions que votre application, que votre application soit toujours présente ou non lorsque l'intention est éventuellement invoquée.

c'est un jeton que vous donnez à une application étrangère qui permet à l'application étrangère d'utiliser votre application permissions d'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, ils exécuteront l'intention avec leurs propres permissions. Mais si vous donnez à la demande étrangère une intention en attente que vous avez créée en utilisant votre propre permission, cette demande exécutera L'intention contenue en utilisant la permission de votre demande.

pour effectuer une émission via un en attente intention donc obtenir 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 intentionnelle que vous voulez accomplir, mais à un moment ultérieur. Pensez - y comme une intention de mettre de la glace. La raison pour laquelle il est nécessaire est parce qu'une intention doit être créée et lancée à partir d'un contexte valide dans votre demande, mais il ya certains cas où une N'est pas disponible au moment où vous voulez exécutez l'action parce que vous êtes techniquement en dehors du contexte de la demande (les deux exemples courants sont le lancement d'une activité à partir d'une Notification ou D'un diffuseur.

en créant un PendingIntent que vous voulez utiliser pour lancer, disons, une activité alors que vous avez le contexte pour le faire (à partir de l'intérieur d'une autre activité ou D'un autre Service), vous pouvez passer cet objet autour de quelque chose d'extérieur afin qu'il lance une partie de votre application en votre nom.

A PendingIntent fournit un moyen pour les applications à travailler, même après leur processus de sortie. Il est important de noter que même après que l'application qui a créé le PendingIntent a été tué, cette intention peut toujours courir. Une description de l'Intention et de cibler les actions à accomplir. Les Instances de cette classe sont créées avec getActivity( Context, int, Intent, int), getBroadcast (Context, int, Intent, int), getService (Context, intent, intent, int); l'objet retourné peut être remis à d'autres applications afin qu'ils puissent effectuer l'action que vous avez décrite en votre nom à une date ultérieure.

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 permissions et identité). En tant que tel, vous devriez être prudent sur 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 à un de vos propres composants, pour s'assurer qu'il est finalement envoyé là et nulle part ailleurs.

un pendentif lui-même est simplement une référence à un jeton maintenu par le système décrivant les données originales utilisées pour le récupérer. Cela signifie que, même si le processus de son application propriétaire est tué, le PendingIntent lui-même restera Utilisable à partir d'autres processus qui lui ont été donnés. Si l'application de création récupère plus tard le même type de PendingIntent (même opération, même Intention d'action, des données, des catégories et des composants, et même des drapeaux), il recevra un PendingIntent qui représente le même si c'est encore valide, et peut donc appeler annuler() pour le supprimer.

0
répondu vikseln 2014-12-23 12:51:15

en attente D'une intention est une intention qui donne toute permission à une autre demande de faire une œuvre particulière. Lorsque l'activité principale est détruite, Android OS, reprend l'autorisation.

0
répondu Neimer 2015-05-12 15:29:50

PendingIntent est un emballage D'intention. L'application étrangère qui reçoit le PendingIntent, ne sait pas le contenu de L'intention qui est enveloppé 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 le calendrier, ou notification avec le clic...). Les conditions sont données par le propriétaire mais traitées par app étranger (par exemple: alarme, notification).

si l'application étrangère a envoyé l'intention à votre application, signifie que l'application étrangère connaît le contenu de l'intention. et l'application étrangère prendre la décision d'envoyer l'intention, puis votre application doit traiter l'intention de répondre à certaines conditions votre application Obtenir la ressource de rendement du système.

0
répondu Rathaur 2017-02-22 05:21:31