Question

Je suis un débutant à Android. J'ai lu la documentation Android mais je dois encore un peu plus de précisions. Quelqu'un peut-il me dire quel est exactement PendingIntent?

Était-ce utile?

La solution

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

Si vous donnez la demande étrangère d'une intention, il exécutera votre Intent avec ses propres autorisations. Mais si vous donnez la demande étrangère un PendingIntent, cette application exécutera votre Intent en utilisant l'autorisation de votre application.

Autres conseils

INTENTIONS

Intentions sont le mécanisme de messagerie standard dans Android qui exprime l'intention de l'utilisateur d'effectuer des travaux. Ils vous permettent d'interagir avec d'autres composants définis par vous ou par le système d'exploitation Android.

Exemple:

  1. Diffusion d'un message
  2. Lancer l'appareil photo
  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 appeler un composant

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

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

  • Créer l'intention
  • b. Ajouter intention options-> Ex. quel type d'intention que nous envoyons à l'OS ou des attributs associés à cette intention, comme une chaîne de texte ou quelque chose d'être passé avec l'intention
  • c. Exécutez l'intention

Real Life Exemple: Disons que je me réveille le matin et je " INTENTION " pour aller aux toilettes. Je vais d'abord devoir penser à aller aux toilettes, mais cela ne me met vraiment aux toilettes. Je vais donc devoir dire à mon cerveau pour sortir du lit, puis marcher jusqu'à la salle de bain, puis relâchez, puis aller me laver les mains, puis aller essuyer mes mains. Une fois que je sais où je vais j'envoyer la commande pour commencer et mon corps passe à l'action.

PENDINGINTENT

A PendingIntent spécifie une action à prendre à l'avenir. Il vous permet de passer un avenir Intent à une autre application et permettre à cette application d'exécuter cette intention comme si elle avait le same permissions as your application, si votre application est toujours là quand l'intention est finalement invoquée. Il est un jeton que vous donnez à une demande étrangère qui permet à l'application étrangère d'utiliser les autorisations de votre application pour exécuter un morceau prédéfini de code.

En donnant un PendingIntent à une autre application, vous accordant le droit d'effectuer l'opération que vous avez spécifié comme si l'autre application vous est (avec les mêmes autorisations et identité). En tant que tel, vous devriez 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 en fin de compte envoyé là-bas et nulle part ailleurs.

Il est une action intention que vous souhaitez effectuer, mais à un moment ultérieur. Pensez-y mettre une intention sur la glace. La raison pour laquelle il est nécessaire est parce qu'une intention doit être créé et lancé à partir d'un Context valide dans votre application, mais il y a certains cas où l'on est pas disponible au moment où vous voulez exécuter l'action parce que vous êtes techniquement en dehors du contexte de l'application (la deux exemples communs lancent une activité à partir d'une notification ou BroadcastReceiver.By la création d'un PendingIntent que vous souhaitez utiliser pour lancer, par exemple, une activité alors que vous avez le Context de le faire (à l'intérieur une autre activité ou service)

La poursuite de l'exemple de la vie réelle: disons que je veux prendre une douche, mais je veux prendre une douche après que je me brosse les dents et manger le petit déjeuner. Donc, je sais que je ne serai pas douchais pendant au moins 30-40 minutes. J'ai encore dans ma tête que je dois préparer mes vêtements, puis monter l'escalier à la salle de bain, puis se déshabiller et douche. Cependant, cela ne se produira jusqu'à 30-40 minutes se sont écoulées. Maintenant, j'ai une intention ATTENDANT de prendre une douche. Il est en attente pour 30-40 minutes.

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

RegUlar intention -> DOES NOT REQUIRE PENDING INTENT TO BE MADE

En attendant intention -> REQUIRES A REGULAR INTENT TO BE CREATED

Intentions sont de deux types- explicite et Implicite

L'intention explicite : Lorsque votre application est au courant de quel composant à appeler pour effectuer une action

Implicite intention : Lorsque votre application ne connaît pas quel composant peut exactement effectuer votre action désirée. Ex Si vous dites simplement que vous souhaitez afficher une URL, le système décide quel composant remplira l'intention.

Pour plus d'idée meilleure et claire sur Intentions. Vist liens ci-dessous

  1. Slidenerd.com
  2. Android Intent Tutorial
  3. Certains Plus

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

Je pense que la documentation est suffisamment détaillée: En attente intention docs .

Il suffit de penser à des cas d'utilisation pour en attente Intentions (comme Intentions de radiodiffusion, des alarmes de planification) et la documentation deviendra plus claire et significative.

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

Et puis je trouve cette vidéo, Google I / O 2013, Au-delà du point bleu Session . Dans cette vidéo, ex-googler Jaikumar Ganesh explique ce PendingIntent est, et qui était la chose m'a donné la grande image de cela.

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

  

Quel est donc une intention en attente?
  Il est un jeton que votre processus d'application donnera au processus de localisation, et le processus de localisation utilisera pour réveiller votre application lorsqu'un événement d'intérêt se produit . Donc, cela signifie essentiellement que votre application en arrière-plan ne doit pas être toujours en cours d'exécution. Lorsque quelque chose d'intéressant se produit, nous vous réveiller. Cela permet d'économiser beaucoup de batterie.

Cette explication devient plus clair avec ce bout 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(...)   
    }
}

Pourquoi PendingIntent est-il nécessaire? Je pensais comme

  1. Pourquoi l'application de réception lui-même ne peut pas créer le 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 je vous envoie bluetoothIntent à une autre application, qui ne dispose pas d'autorisation android.permission.BLUETOOTH_ADMIN, cette application ne peut pas recevoir activer Bluetooth avec startActivity(bluetoothIntent).

La limitation est dépassée à l'aide PendingIntent. Avec l'application de réception PendingIntent, ne doivent pas avoir android.permission.BLUETOOTH_ADMIN pour permettre Bluetooth. Source .

intention en attente est une intention qui commencera à un moment donné à l'avenir. intention normale commence immédiatement quand il est passé à startActivity(Intent) ou StartService(Intent).

A l'intention avenir que d'autres applications peuvent utiliser.
Et voici un exemple pour la création d'un:

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

TAXI ANALOGIQUE

Intention

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);

est comme lorsque vous appelez un taxi:

Myself = CurrentClass
Taxi Driver = ServiceClass

En attendant 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 tiers 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 pour un tour à Uber / Lyft. Ils seront ensuite aller de l'avant et d'appeler l'un de leurs pilotes en votre nom.

Par conséquent:

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 notification, Gestionnaire d'alarmes ou d'autres applications 3ème partie), qui permet à cette autre application à utiliser les autorisations de votre application pour exécuter un morceau prédéfini de code. Pour effectuer une diffusion par une intention en attente ainsi obtenir un PendingIntent via PendingIntent.getBroadcast (). Pour effectuer une activité par une intention en attente que vous recevez l'activité via PendingIntent.getActivity ().

Qu'est-ce qu'un 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. Il y a beaucoup d'actions qui peuvent être faites, comme 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 comme suit: une. Créer l'intention b. Ajout d'options d'intention -> Ex. quel type d'intention que nous envoyons à l'OS ou des attributs associés à cette intention, comme une chaîne de texte ou quelque chose d'être passé avec l'intention c. Exécutez l'intention

Real Life Exemple: Disons que je me réveille le matin et je « intention » d'aller aux toilettes. Je vais d'abord devoir penser à aller aux toilettes, mais cela ne m'a pas vraiment se rendre à la salle de bain. Je vais donc devoir dire à mon cerveau pour sortir du lit, puis marcher jusqu'à la salle de bain, puis relâchez, puis aller me laver les mains, puis aller essuyer mes mains. Une fois que je sais où je vais j'envoyer la commande pour commencer et mon corps passe à l'action.

Qu'est-ce que est en attente Intentions?

La poursuite de l'exemple de la vie réelle, disons que je veux prendre une douche, mais je veux prendre une douche après que je me brosse les dents et manger le petit déjeuner. Donc, je sais que je ne serai pas douchais jusqu'à au moins 30-40 minutes. J'ai encore dans ma tête que je dois préparer mes vêtements, puis monter l'escalier à la salle de bain, puis se déshabiller et douche. Cependant, cela ne se produira pas jusqu'à 30-40 minutes se sont écoulées. J'ai maintenant une intention ATTENDANT de prendre une douche. Il est en attente pour 30-40 minutes.

C'est à peu près la différence entre une attente et une intention intention régulière. Intentions réguliers peuvent être créés sans attente intention, mais dans le but de créer une attente intention que vous devez avoir une configuration régulière intention première.

PendingIntent est essentiellement un objet qui enveloppe un autre objet Intent. Ensuite, il peut être transmis à une demande étrangère où vous accorder cette application le droit d'effectuer l'opération, à savoir, réaliser l'objet comme si elle était exécutée à partir du processus de votre propre application (même la permission et l'identité). Pour des raisons de sécurité, vous devez toujours passer des intentions explicites à un PendingIntent plutôt que d'être implicite.

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

Dans une langue facile,
 1. Une description d'une intention et une action à effectuer cible. D'abord, vous devez créer une intention et alors vous devez passer une classe java spécifique que vous souhaitez exécuter, à l'intention.
2. Vous pouvez appeler les classes java qui est votre classe d'action de classe par PendingIntent.getActivity, PendingIntent.getActivities (contexte, int, Intent [], int), PendingIntent.getBroadcast (contexte, int, intention, int) et PendingIntent. getService (contexte, int, Intent, int); Vous voyez cette intention qui est provient de l'étape 1
3. Vous devez garder à l'esprit que ... En donnant un PendingIntent à une autre application, vous accordant le droit d'effectuer l'opération que vous avez spécifié.

Ce que j'ai appris après une longue lecture.

Une PendingIntent enveloppe l'intention générale avec un jeton que vous donnez à l'application étrangère pour exécuter avec votre permission. Par exemple:

  

La notification de votre application musicale ne peut pas jouer / mettre en pause la musique si vous   n'a pas donné le PendingIntent d'envoyer une diffusion parce que votre application musicale   a la permission de READ_EXTERNAL_STORAGE que l'application de notification   ne fonctionne pas. La notification est un service de système (il est donc une application étrangère).

Comme son nom l'indique .. PendingIntent

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

En attendant intention spécifie une action à prendre à l'avenir. Il vous permet de passer un avenir à une autre intention application et permettre à cette application d'exécuter cette intention comme si elle avait les mêmes autorisations que votre application, si votre application est toujours là quand l'intention est finalement invoqué.

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

Si vous donnez la demande étrangère d'une intention, et que l'application envoie / diffuse l'intention que vous avez donné, ils exécuteront l'intention avec leurs propres autorisations. Mais si vous donnez au lieu de la demande étrangère d'une intention En attendant que vous avez créé en utilisant votre propre autorisation, cette application exécutera l'intention contenue en utilisant l'autorisation de votre application.

Pour effectuer une diffusion par une intention en attente ainsi obtenir un PendingIntent via PendingIntent.getBroadcast (). Pour effectuer une activité par une intention en attente que vous recevez l'activité via PendingIntent.getActivity ().

Il est une action intention que vous souhaitez effectuer, mais plus tard. Pensez-y mettre une intention sur la glace. La raison pour laquelle il est nécessaire est parce qu'une intention doit être créé et lancé à partir d'un contexte valide dans votre application, mais il y a certains cas où l'on est pas disponible au moment où vous voulez exécuter l'action parce que vous êtes techniquement en dehors du contexte de l'application (la deux exemples communs lancent une activité d'une notification ou BroadcastReceiver.

En créant un PendingIntent que vous souhaitez utiliser pour lancer, par exemple, une activité alors que vous avez le contexte de le faire (à l'intérieur une autre activité ou service), vous pouvez passer cet objet autour de quelque chose d'extérieur afin qu'il lance une partie de votre demande en votre nom.

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

En donnant un PendingIntent à une autre application, vous accordant le droit d'effectuer l'opération que vous avez spécifié comme si l'autre application vous est (avec les mêmes autorisations et identité). En tant que tel, vous devriez 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 assurer qu'elle est en fin de compte, il a envoyé et nulle part ailleurs

A PendingIntent lui-même est tout 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 son processus d'application propriétaire est tué, le PendingIntent lui-même restera utilisable à partir d'autres processus qui lui ont été donnés. Si la demande la création réenregistré ultérieurement récupère le même genre de PendingIntent (même opération, même action intention, les données, les catégories et les composants, et les mêmes drapeaux), il recevra un PendingIntent représentant le même ordre d'idées, si c'est toujours valide, et peut appeler ainsi annuler () pour le supprimer.

En attendant intention est une intention qui fournit toute l'autorisation d'une autre application pour faire un ouvrage particulier. Lorsque l'activité principale est détruite, Android OS reprend l'autorisation de celui-ci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top