0% ont trouvé ce document utile (0 vote)
88 vues26 pages

Chapitre 5 - Intents

Le chapitre traite des Intents dans le développement d'applications Android, qui sont des messages permettant la communication entre composants d'applications ou entre différentes applications. Il explique les différents types d'Intents, notamment explicites et implicites, ainsi que les méthodes pour démarrer des activités avec ou sans retour de résultats. Enfin, il aborde le transport d'informations entre activités et la résolution d'Intents à l'aide de filtres définis dans les fichiers Manifest.

Transféré par

gaaloul.galoul33
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
88 vues26 pages

Chapitre 5 - Intents

Le chapitre traite des Intents dans le développement d'applications Android, qui sont des messages permettant la communication entre composants d'applications ou entre différentes applications. Il explique les différents types d'Intents, notamment explicites et implicites, ainsi que les méthodes pour démarrer des activités avec ou sans retour de résultats. Enfin, il aborde le transport d'informations entre activités et la résolution d'Intents à l'aide de filtres définis dans les fichiers Manifest.

Transféré par

gaaloul.galoul33
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Naoufel KHAYATI « Développement des Systèmes Mobiles »

168

Chapitre 5

Intents

Naoufel KHAYATI
[email protected]

AU. 2024 - 2025

Introduction
169

 La communication au sein d’un système Android est basée


sur l’échange de messages.
 Un message = Une intention d’une action.

 Un message peut être émis à un autre composant de la


même application (une activité, un service, etc.) ou d’une
autre application.

 Un message permet de véhiculer toutes les informations


nécessaires à la réalisation d’une action:
 action à effectuer et données à utiliser.

Les Intents

ENISo – IA2 & GTE2 – 2024 / 2025 1


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Introduction
170

 Les objets Intent servent essentiellement à:


 Démarrer une activité au sein de la même application
 Solliciter d’autres applications
 Diffuser des informations

 Pour le 1er point, on parle de démarrage d’une activité


en mode explicite.

 Pour le 2ème point, on parle de démarrage d’une


activité en mode implicite et de résolution d’intents.

 Pour le 3ème point, on parle de diffusion d’intents.

171

Intents explicites

ENISo – IA2 & GTE2 – 2024 / 2025 2


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Démarrage d’une activité – Sans retour


172

 De façon générale, chaque composant d’une


application nécessite l’emploi d’un Intent pour être
démarré.

 Si on souhaite démarrer une activité sans retour, on


utilise simplement la méthode startActivity()
 Son paramètre est une instance de la classe Intent
spécifiant la classe de l’activité à lancer :

Démarrage d’une activité – Avec retour


173

 Notons « activité fille », l’activité à lancer.


 Notons « activité mère », celle qui va démarrer l’activité
fille.

 Avec startActivity(), on ne sera jamais averti de l’état


de l’activité fille.
 On ne peut rien récupérer de cette activité.

 Si par exemple une activité fille propose à l’utilisateur


de répondre à un formulaire par Oui ou Non.
 Comment l’activité mère récupère-t-elle la valeur saisie
dans l’activité fille?

ENISo – IA2 & GTE2 – 2024 / 2025 3


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Démarrage d’une activité – Avec retour


174

 Afin de permettre à une activité mère de récupérer


un résultat de la part d’une activité fille, il faut
suivre les étapes suivantes :

 enregistrer l’activité mère pour la récupération d'un


résultat,

 lancer l’activité fille qui fournira un résultat, et

 traiter le résultat une fois reçu par l’activité mère.

Démarrage d’une activité – Avec retour


175

1. Enregistrement de l’activité mère pour la récupération


d'un résultat

 registerForActivityResult() renvoie un ActivityResultLauncher


qui sera utilisé pour lancer l'activité fille.

 Dedans, c’est le code de la fonction de callback


onActivityResult() qui servira à traiter le résultat reçu.

ENISo – IA2 & GTE2 – 2024 / 2025 4


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Démarrage d’une activité – Avec retour


176

 Si on attend plusieurs résultats distincts, on peut


appeler registerForActivityResult() plusieurs fois
pour enregistrer plusieurs instances
ActivityResultLauncher.

 registerForActivityResult() peut être appelée en


toute sécurité avant la création de l’activité (en
dehors de onCreate()).

Démarrage d’une activité – Avec retour


177

2. Lancement de l’activité fille

 Se fait grâce à la méthode launch() de l’objet


ActivityResultLauncher précédemment créé.

3. Traitement du résultat

 Lorsque l’activité fille aura terminé sa tâche, elle en avertira


l’activité mère en lui communiquant un code résultat (par
exemples RESULT_OK ou RESULT_CANCELED) et éventuellement
un résultat.
 Ensuite, la fonction de callback onActivityResult() sera exécutée.

ENISo – IA2 & GTE2 – 2024 / 2025 5


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Démarrage d’une activité – Avec retour


178

 Un resultCode peut prendre plusieurs valeurs:

 RESULT_OK vaut -1 : si l'activité fille va jusqu'au bout


de son exécution.

 RESULT_CANCELED vaut 0 : si l'activité fille a été


interrompue (bouton Cancel / Annuler ou appui sur la
touche retour arrière du téléphone).

 RESULT_FIRST_USER : pour commencer une liste de


valeurs définies par l’utilisateur.

Démarrage d’une activité – Avec retour


179

 Dans l'activité fille, c'est la méthode setResult() qui renverra le


resultCode et le résultat vers l'activité mère.

 setResult() est toujours suivie par la méthode finish(), pour


quitter l’activité fille.

ENISo – IA2 & GTE2 – 2024 / 2025 6


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Transport d’informations – (M  F)
180 Mère

Transmission
 Les intents peuvent permettre aussi de "transporter" des
informations grâce à la méthode putExtra ().
 Cette méthode utilise le principe d’un couple clé/valeur.

 La méthode "putExtra ()" est appliquée sur un objet de


type Intent.
 L'intent va donc appeler l’activité fille et lui transmettre
l'information.

intent.putExtra (clé,valeur)

Transport d’informations – (M  F)
181 Mère

Transmission – Code chez la mère

ENISo – IA2 & GTE2 – 2024 / 2025 7


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Transport d’informations – (M  F)
182 Fille
Extraction
 Extraire la valeur de l'intent: il faut utiliser un objet de type
"Bundle".
 val extras = intent.extras

 Placer la valeur transportée dans une variable: il faut appliquer la


méthode "getX" à l'objet "Bundle".

 Cette méthode accepte un paramètre, la clé associée à la valeur


transportée.
 X est à remplacer par le type de la valeur transportée.
 "getString" si la valeur transportée est de type String,
 "getInt" si la valeur est de type int,
 "getDoubleArray" si la valeur transportée est un tableau de type Double,
 etc.

Transport d’informations – (M  F)
183 Fille

Extraction – Code chez la fille


NB : t1 et t2 sont deux TextViews

ENISo – IA2 & GTE2 – 2024 / 2025 8


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Transport d’informations – (F  M)
184

 Créer un objet de type Intent vide dans l'activité fille.

 Utiliser la méthode putExtra() pour remplir l'objet Intent


avec les informations à transmettre.

 La méthode setResult() aura alors 2 paramètres


 Le resultCode et,
 l'objet Intent déjà créé.

 L'activité mère utilisera la méthode getXExtra().

Transport d’informations – (F  M)
185 Fille
Code chez la fille

ENISo – IA2 & GTE2 – 2024 / 2025 9


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Transport d’informations – (F  M)
186 Mère
Code chez la mère

187

Intents implicites

ENISo – IA2 & GTE2 – 2024 / 2025 10


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Appel à une autre application


188

 Une application A, pour solliciter une autre


application B (inconnue pour A):

 peut se contenter de transmettre son intention au


système qui va se charger de:

 trouver l’application B et le composant correspondant,


 démarrer ce dernier (activité, service, etc.),
 lui transmettre l’Intent correspondant.

Appel à une autre application


189

 C’est le système qui décide d’utiliser l’application adéquate.

 Navigateur pour ouvrir une page web


 Composeur pour passer un appel

 Pour choisir le composant le plus approprié, le système se base sur les


informations spécifiées dans:

 l’objet Intent (action, données, etc.) créé par le demandeur.


 les Intent Filters définis dans le fichier Manifest du composant recherché.
 Il essaie de trouver une correspondance.

 Ce mécanisme d’Intent implicite, permet d’éviter les dépendances envers


des applications.

 L’association entre l’application appelante et le composant appelé se fait au


moment de l’exécution et non pas à la compilation.

ENISo – IA2 & GTE2 – 2024 / 2025 11


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Appel à une autre application


190

Les données

 Les données sont formatées à l'aide des URI.


 Un URI est une chaîne de caractères qui permet
d'identifier un endroit.
 La syntaxe d'un URI se présente comme suit:

Appel à une autre application


191

 Le schéma décrit la nature de l'information.


 tel: s'il s'agit d'un numéro de téléphone à composer.
 sms / smsto: s’il s’agit d’un numéro de téléphone destinataire avec
éventuellement le corps du message.
 http: s'il s'agit d'un site internet.
 geo: s’il s’agit d’une requête GPS (composée de latitude et longitude).

 L'information est la donnée elle même.


 tel: 95200444
 geo: 36.8, 10.17

 La requête permet de fournir une précision par rapport à l'information.

 Le fragment permet d’accéder à une sous-partie de l'information.

ENISo – IA2 & GTE2 – 2024 / 2025 12


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Appel à une autre application


192

L'action

 Une action est une constante qui se trouve dans la classe


Intent et qui commence toujours par « ACTION_ ».

 ACTION_VIEW: permet de visualiser une donnée.

 Une adresse mail sera affichée dans l'application pour les mails,
 Un numéro de téléphone dans le composeur,
 Une adresse Web dans le navigateur, etc.

Appel à une autre application


193

 ACTION_DIAL: pour ouvrir le composeur de numéro du téléphone.


 ACTION_CALL: pour appeler un numéro de téléphone
 ACTION_SENDTO: pour envoyer un SMS à quelqu'un.
 ACTION_WEB_SEARCH: pour effectuer une recherche sur internet

 ACTION_DELETE: pour supprimer des données à partir d’un URI.


 ACTION_EDIT: pour ouvrir un éditeur adapté pour modifier les
données fournies.
 ACTION_INSERT: pour insérer des données.
 ACTION_PICK: pour sélectionner un élément dans un ensemble de
données.

 Les 4 dernières actions fonctionnent avec des Content Providers.

ENISo – IA2 & GTE2 – 2024 / 2025 13


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Appel à une autre application


194

Exemple: Composer un numéro de téléphone.

 Créer un nouvel objet Intent spécifiant le type d’action et les


valeurs complémentaires dans le constructeur;

 ACTION_DIAL comme type d’action pour demander au système


de composer un numéro.
 Le numéro à appeler comme info complémentaire, inscrit dans un
URI.
 Aucune précision du type de la classe cible.

Appel à une autre application


195

Exemple: Composer un numéro de téléphone.

 Démarrer une nouvelle activité en spécifiant cet


objet Intent.
 Le système déterminera quelle application ouvrir, par
défaut l’interface de composition de numéro.

ENISo – IA2 & GTE2 – 2024 / 2025 14


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Appel à une autre application


196

Appel à une autre application


197

ENISo – IA2 & GTE2 – 2024 / 2025 15


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Appel à une autre application


198

 Exemple: Visiter une page Web.

Appel à une autre application


199

Accorder les permissions liées aux actions


 émettre un appel depuis l’application

ENISo – IA2 & GTE2 – 2024 / 2025 16


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Appel à une autre application


200

Accorder les permissions liées aux actions

 Certaines actions requièrent des privilèges spéciaux


qui amèneront à ajouter des permissions dans le
fichier Manifest de l’application.

 Pour notre exemple, il faudra ajouter la permission


« android.permission.CALL_PHONE » sous l’élément
racine <manifest>.

Appel à une autre application


201

Accorder les permissions liées aux actions

C’est insuffisant!!!
Il faut accorder l’autorisation
manuellement dans l’appareil
mobile, OU
Demander l’autorisation des
utilisateurs.

ENISo – IA2 & GTE2 – 2024 / 2025 17


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Résolution d’Intents
202

 Par exemple, dans le cas de ACTION_VIEW, comment Android


détermine quel composant doit répondre à un Intent donné?

 Android compare l'Intent à des filtres existants dans les Manifest


des différentes applications installées.

 Ces filtres signalent que les composants des applications peuvent gérer
ou répondre à certains Intents.
 Ces filtres sont représentés par les nœuds <intent-filter>.

 Un composant d'une application doit avoir autant de filtres que de


capacités de traitement.

 Le test de conformité entre un Intent et un filtre peut se faire sur trois


critères: l’action, la catégorie et les données.

Résolution d’Intents
203

 Exemples de Filtres (Manifest)

ENISo – IA2 & GTE2 – 2024 / 2025 18


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Résolution d’Intents
204

Action (filtre)

 Permet de filtrer en fonction du champ Action d'un Intent.

 Il peut y en avoir une ou plusieurs balises <action> par filtre.

 Si un tel champ est absent, tous les Intents implicites seront refusés.

 Un Intent sera accepté si ce qui se trouve dans son champ action est
identique à au moins une des actions du filtre.

 Si un Intent ne précise pas d'action, alors il sera automatiquement


accepté.

Résolution d’Intents
205

 Exemples d’actions

ENISo – IA2 & GTE2 – 2024 / 2025 19


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Résolution d’Intents
206

Catégorie (filtre)

 Les balises <category> ne sont pas indispensables.

 S'il y en a une ou plusieurs, alors pour passer ce test, il


faut que toutes les catégories de l'Intent correspondent
à des catégories du filtre.

 Si on veut qu’un composant accepte les Intents implicites,


on doit rajouter la catégorie CATEGORY_DEFAULT au
filtre.

Résolution d’Intents
207

 Exemples de catégories

ENISo – IA2 & GTE2 – 2024 / 2025 20


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Résolution d’Intents
208

Données (filtre)

 Les balises <data> déclarent les différents types de


données acceptés, en utilisant un ou plusieurs attributs.

Résolution d’Intents
209

Données (filtre)

 Les types MIME peuvent être (liste non exhaustive) :

ENISo – IA2 & GTE2 – 2024 / 2025 21


Naoufel KHAYATI « Développement des Systèmes Mobiles »

210

Diffusion d’intents
(Broadcast intents & Broadcast Receivers)

Diffusion d’Intents
211

 Il est possible de diffuser un objet Intent à plusieurs


applications

 Informer les applications d’un ensemble d’informations


systèmes
 État de la batterie (faible, chargée).
 État du réseau (Wifi connecté, déconnecté).
 Appel entrant, SMS entrant, etc.

 Le système pouvant très vite devenir bavard, les


applications peuvent mettre en place un filtre.

 Ne conserver que les Intents jugés nécessaires.

ENISo – IA2 & GTE2 – 2024 / 2025 22


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Diffusion d’Intents
212

 Ces Intents sont alors appelés des Broadcast Intents.

 Les récepteurs sont appelés des Broadcast Receivers.

 Android propose plusieurs actions prédéfinies pour


communiquer l’état d’un service ou le changement
d’un composant du système.
 Messages natifs

Diffusion d’Intents
213

ENISo – IA2 & GTE2 – 2024 / 2025 23


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Diffusion d’Intents
214

Diffuser un Intent programmé

 Envoyer un Intent au système grâce à la méthode


sendBroadcast() d’une activité.

 Il faut bien définir cet objet intent, sinon on risque de


parasiter le système ou d’obtenir des comportements non
désirés (ouverture d’applications non sollicitées, etc.).

Diffusion d’Intents
215

Recevoir et traiter un Intent diffusé

 Écouter le flux de messages grâce à un objet


BroadcastReceiver.

 À chaque fois que cet écouteur recevra un message, le


système appellera sa méthode onReceive().

ENISo – IA2 & GTE2 – 2024 / 2025 24


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Diffusion d’Intents
216

Déclaration du Receiver en XML

 Pour que ça marche, il faut déclarer le receiver et lui définir un filtre


d’Intents dans le fichier Manifest de l’application.

 L’application n’a pas besoin d’être en cours d’exécution pour que le


filtre fonctionne.

 Si elle n’est pas lancée et qu’un Intent correspondant au filtre est diffusé,
une nouvelle instance de l’application sera automatiquement démarrée
par le système.

Diffusion d’Intents
217

Déclaration du Receiver en Kotlin

 Associer le receiver au filtre d’Intent avec la


méthode registerReceiver().

ENISo – IA2 & GTE2 – 2024 / 2025 25


Naoufel KHAYATI « Développement des Systèmes Mobiles »

Pour Finir…
218

 Les intents représentent l’un des principaux


composants d’une application Android.

 Intents explicites (les plus simples à définir et à gérer).

 Intents implicites et résolution des intents via les filtres.

 Diffusion
d’intents et gestion de leur réception par les
Broadcast Receivers.

219

A SUIVRE…

TO BE CONTINUED…

ENISo – IA2 & GTE2 – 2024 / 2025 26

Vous aimerez peut-être aussi