Je suis un débutant sur Android. J'ai lu la documentation Android mais j'ai encore besoin de précisions. Quelqu'un peut-il me dire ce qu'est exactement un PendingIntent
?
538
Je suis un débutant sur Android. J'ai lu la documentation Android mais j'ai encore besoin de précisions. Quelqu'un peut-il me dire ce qu'est exactement un PendingIntent
?
A PendingIntent
est un jeton que vous donnez à une application étrangère (par exemple NotificationManager
, l' AlarmManager
écran d'accueil AppWidgetManager
ou 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 à l'application étrangère, elle exécutera votre Intent
avec ses propres autorisations. Mais si vous donnez à l'application étrangère un PendingIntent
, cette application exécutera votre Intent
utilisation de l'autorisation de votre application.
Une attente intention est un jeton que vous donnez à une application pour effectuer une action au nom de vos applications indépendamment du fait que votre processus de demande est en vie ou non.
Je pense que la documentation est suffisamment détaillée: documents en attente d'intention .
Pensez simplement à des cas d'utilisation pour les intentions en attente comme (intentions de diffusion, planification d'alarmes) et la documentation deviendra plus claire et significative.
la source
Dans mon cas, aucune des réponses ci-dessus ni la documentation officielle de Google ne m'ont aidé à saisir le concept de
PendingIntent
classe.Et puis j'ai trouvé cette vidéo, Google I / O 2013, Beyond the Blue Dot session . Dans cette vidéo, l'ex-googleur Jaikumar Ganesh explique ce que
PendingIntent
c'est, et c'est ce qui m'a donné une vue d'ensemble de cela.Ci-dessous est juste la transcription de la vidéo ci-dessus (à partir de 15:24 ).
Cette explication devient plus claire avec cet extrait de code (qui est inclus dans la diapositive de la session).
la source
Pourquoi PendingIntent est requis? Je pensais comme
Intent
ouIntent
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 l'autorisationandroid.permission.BLUETOOTH_ADMIN
, cette application de réception ne peut pas activer Bluetooth avecstartActivity(bluetoothIntent)
.La limitation est surmontée en utilisant
PendingIntent
. AvecPendingIntent
l'application de réception, il n'est pas nécessaire d'avoirandroid.permission.BLUETOOTH_ADMIN
activé Bluetooth. Source .la source
L'intention en attente est une intention qui commencera à un moment donné dans le futur. L'intention normale commence immédiatement lorsqu'elle est transmise à
startActivity(Intent)
ouStartService(Intent)
.la source
Une intention future que d'autres applications peuvent utiliser.
Et voici un exemple pour en créer un:
la source
ANALOGIE TAXI
Intention
Les intentions sont généralement utilisées pour démarrer les services. Par exemple:
C'est comme lorsque vous appelez un taxi:
Intention en attente
Vous devrez utiliser quelque chose comme ceci:
Maintenant, ce tiers démarrera le service en votre nom. Une analogie réelle est Uber ou Lyft qui sont tous deux des compagnies de taxi.
Vous envoyez une demande de trajet à Uber / Lyft. Ils iront ensuite de l'avant et appelleront l'un de leurs chauffeurs en votre nom.
Donc:
la source
Un PendingIntent est un jeton que vous donnez à une autre application (par exemple, Notification Manager, Alarm Manager ou d'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 donc un PendingIntent via PendingIntent.getBroadcast (). Pour effectuer une activité via une intention en attente, vous recevez l'activité via PendingIntent.getActivity ().
la source
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. Considérez-le comme une action qui doit avoir lieu. Il existe de nombreuses actions qui peuvent être effectuées telles que l'envoi d'un e-mail, ou joindre une photo à un e-mail ou même lancer une application. Le flux de travail logique de la création d'une intention est généralement le suivant: a. Créer l'intention b. Ajouter des options d'intention -> Ex. quel type d'intention nous envoyons au système d'exploitation ou tout attribut associé à cette intention, comme une chaîne de texte ou quelque chose transmis avec l'intention c. RUN the Intent
Exemple concret: disons que je me réveille le matin et que je «compte» aller aux toilettes. Je devrai d'abord penser à aller aux toilettes, mais cela ne me fait pas vraiment aller aux toilettes. Je devrai alors dire à mon cerveau de sortir du lit en premier, puis marcher jusqu'aux toilettes, puis relâcher, puis aller me laver les mains, puis aller m'essuyer les mains. Une fois que je sais où je vais, j'ENVOIE la commande pour commencer et mon corps passe à l'action.
Qu'est-ce que les intentions en attente?
En reprenant l'exemple de la vie réelle, disons que je veux prendre une douche mais je veux prendre une douche APRÈS avoir brossé mes dents et pris le petit déjeuner. Je sais donc que je ne prendrai pas de douche avant au moins 30 à 40 minutes. J'ai encore dans ma tête que je dois préparer mes vêtements, puis remonter les escaliers jusqu'à la salle de bain, puis me déshabiller puis prendre une douche. Cependant, cela ne se produira que 30 à 40 minutes se seront écoulées. J'ai maintenant l'intention de prendre une 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.
la source
PendingIntent
est fondamentalement un objet qui enveloppe un autreIntent
objet. Ensuite, il peut être transmis à une application étrangère où vous accordez à cette application le droit d'exécuter l'opération, c'est-à-dire d'exécuter l'intention comme si elle avait été exécutée à partir du processus de votre propre application (mêmes autorisations et identité). Pour des raisons de sécurité, vous devez toujours transmettre des intentions explicites à un PendingIntent plutôt que d'être implicite.la source
Dans un langage simple,
1. Une description d'une action d'intention et de cible à effectuer. Vous devez d'abord créer une intention, puis vous devez passer une classe Java spécifique que vous souhaitez exécuter, à l'intention.
2. Vous pouvez appeler la classe java qui est 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 que l'intention qui vient de l'étape 1
3. Vous devez garder à l'esprit que ... En donnant 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.
la source
Un PendingIntent enveloppe l'intention générale avec un jeton que vous donnez à une application étrangère à exécuter avec votre permission. Par exemple:
la source
Comme son nom l'indique .. PendingIntent
vous pouvez le suspendre (le faire après un certain temps). Cela fonctionne comme l'autre intention .. c'est un moyen de confier votre tâche à une autre application à effectuer en votre nom.
la source
Une intention en attente spécifie une action à entreprendre à l'avenir. Il vous permet de passer une intention future à une autre application et de permettre à cette application d'exécuter cette intention comme si elle avait les mêmes autorisations que votre application, que votre application soit toujours présente 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.
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 autorisations. Mais si vous donnez plutôt à l'application étrangère une intention en attente que vous avez créée à l'aide de votre propre autorisation, cette application exécutera l'intention contenue à l'aide de l'autorisation de votre application.
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 ().
Il s'agit d'une action d'intention que vous souhaitez effectuer, mais ultérieurement. Pensez-y à mettre une intention sur la glace. La raison pour laquelle elle est nécessaire est qu'une intention doit être créée et lancée à 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 en dehors du contexte de l'application (le 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, disons, une activité pendant que vous avez le contexte pour le faire (à l'intérieur d'une autre activité ou service), vous pouvez passer cet objet à quelque chose d'extérieur pour qu'il lance une partie de votre application. 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, Intent peut toujours s'exécuter. Une description d'une intention et d'une action cible à exécuter 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'objet retourné peut être remis à d'autres applications afin qu'elles puissent effectuer l'action que vous avez décrite en votre nom ultérieurement.
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 identité). 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, pour vous assurer qu'il est finalement envoyé là-bas et nulle part ailleurs.
Un PendingIntent lui-même est simplement une référence à un jeton maintenu 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 sa propre application est tué, le PendingIntent lui-même restera utilisable à partir des autres processus qui lui ont été attribué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 celui-ci est toujours valide et peut appelez donc cancel () pour le supprimer.
la source
L'intention en attente est une intention qui fournit toutes les autorisations à une autre application pour effectuer des travaux particuliers. Lorsque l'activité principale est détruite, Android OS en reprend l'autorisation.
la source