Definition
Dans android le système gère lui-même les composants . Le développeur ne peut pas les initialiser et gérer leur cycle de vie Pour cela on envoie un messages appelé Intent pour :
- lancer une activity
- lancer un service
- envoyer un evénement aux broadcast-receivers
Cela permet
- d’un composant precis d’appeler n’importe lequel composant de tout les applications installé sur l’appareil
- de traiter les intents l’un après l’autre sous la forme d’une file d’attente
on distingue deux type d’Intents
- Les Intents explicite : cible directement le composant à n’appeler
- Les Intents implicite : ne cible pas de composant , mais décrit un action à realiser , le systeme d’exploitation choisira le composant
les intent sont défine par la classe java android.content.Intent et prend comme paramètre
- la classe d’appel en java du composant à appeler ( null si implice)
- action : une chaine de caratère précisant l’action à réaliser ( optionnel si explice )
- Catégorie: une ou plusieurs chaine de caratère indique le type d’intent pour distinguer les composants (optionnel)
- data : Uri qui cible oû l’action doit porter (optionnel )
- pubextra : ajout un couple donnée clée-valeur suplémantaire (optionnel)
Example
Example d’une déclaration d’un explicite intent
Intent( context , MyActivity::class.java )
Example d’une déclaration d’un implicite intent
Intent("Mai").apply{
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "hello")
type = "text/plain"
}
Recevoir un implicite Intent dans Composant
Normalement les composant ne peuvent pas être lancer par les implicites Intents du fait que le
Pour cela il faut implémenter un intent-filter définie par
- est implémenté par la balise <intent-filter> dans le composant sein du fichier android.manifest.xml .
- prend comme parametre les balises <action> ,<catégorie> et <data> correspondant aux même paramête de la classe Intent
une exemple
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>