Vous êtes sur la page 1sur 32

Module (M17) :

Programmation mobile
Pr. Yassine SADQI

Department of Maths and Computer Science


Laboratoire d’Innovation en Mathématiques,
Applications & Technologies de l’Information
(LIMATI)
y.sadqi@usms.ma
Chapitre 3 : Les Activités et intents
Android (partie 2)

Pr. Yassine SADQI 2


III. Généralités sur
les Intents Android
(suite)

3
Rappel: Que peuvent faire un intent?

1. Start activities
o Exemple1: On clique un boutton est l’intent lance une nouvelle activité
o Exemple 2: On clique sur « Partager » l’intent ouvre une application qui nous permet
de poster une photo
2. Start services
o Exemple: Lancer le téléchargement d'un fichier en arrière-plan
3. Deliver broadcasts
o Exemple: Le système informe tout le monde que le téléphone se charge maintenant

Pr. Yassine SADQI 4


Activité avec un intent explicite

•Deux étapes de base pour démarrer une activité spécifique (intent


explicite):
1. Créer l’objet intent explicite
2. Utiliser l’intent crée pour démarrer l'activité. Il existe deux
façons, selon qu'on veuille que le composant de destination
nous renvoie une réponse ou pas. On s’intéresse dans un
premier temps au 1er cas.

Pr. Yassine SADQI 5


Activité avec un intent explicite

1. Créer l’objet intent explicite (initiation de la classe Intent) en précisant le


contexte qui appartienne au package où se trouve l’activité de destination (classe
Java)
Intent intent = new Intent(Context context, ActivityName.class);

 Si la l’activité de destination appartient au package du Context actuel :


Intent intent = new Intent(Activite_de_depart.this, Activite_de_destination.class);

2. Il existe ensuite deux façons de lancer l'intent, selon qu'on veuille que le composant
de destination nous renvoie une réponse ou pas. On s’intéresse dans cette partie au
1er cas ( sans retour).
 Lancer l’activité avec la méthode:
void startActivity (Intent intent)

Pr. Yassine SADQI 6


Activité avec un intent implicite

• Afin de demander au système Android de trouver une activité pour gérer votre demande:
1. Créer un intent
 Intent intent = new Intent(action, uri);
• action: Une action est une constante qui se trouve dans la classe Intent et qui
commence toujours par « ACTION_ » suivi d'un verbe (en anglais, bien sûr) de façon
à bien faire comprendre qu'il s'agit d'une action.
2. Utiliser l’intent crée pour démarrer l'activité
 startActivity(intent);

Pr. Yassine SADQI 7


Activité avec un intent implicite

• URI: Uniform Ressource Identifier


o Définit par T. Berners-Lee dans la RFC 2396 comme « une courte chaîne de caractères
identifiant une ressource sur un réseau (par exemple une ressource web) physique ou
abstraite ».
o Un URI doit respecter une syntaxe décrite dans la RFC 3986.
o La syntaxe d'un URI peut être analysée de la manière suivante (les parties entre
accolades {} sont optionnelles) :
 <schéma> : <information> { ? <requête> } { # <fragment> }
• schéma décrit quelle est la nature de l'information. S'il s'agit d'un numéro de
téléphone, alors le schéma sera tel, s'il s'agit d'un site internet, alors le schéma
sera http, etc.

Pr. Yassine SADQI 8


Activité avec un intent implicite

• URI: Uniform Ressource Identifier (suite)


o L'information est la donnée en tant que telle.
o La requête permet de fournir une précision par rapport à l'information.
 Cette information respecte elle aussi une syntaxe, mais qui dépend du schéma
cette fois-ci.
 Pour un numéro de téléphone, vous pouvez vous contenter d'insérer le numéro
« tel:0606060606 ». Pour un site internet, il s'agit d'un chemin hiérarchique URL.

<schéma> : <information> { ? <requête> } { # <fragment> }

Pr. Yassine SADQI 9


Activité avec un intent implicite

• URI: Uniform Ressource Identifier (suite)


<schéma> : <information> { ? <requête> } { # <fragment> }
oLe fragment permet enfin d’accéder à une sous-partie de l'information.
oPour créer un objet URI, c'est simple, il suffit d'utiliser la méthode statique:
Uri Uri.parse(String uri).
 Par exemple, pour envoyer un SMS à une personne:

Uri sms = Uri.parse("sms:0606060606");


Uri sms = Uri.parse("sms:0606060606,0606060607?body=Salut%20les%20amis");
Pr. Yassine SADQI 10
Activité avec un intent implicite: Exemples

• Pour créer un intent qui va ouvrir le composeur téléphonique avec le numéro de


téléphone 0606060606

public void onClick(View v) {


Uri telephone = Uri.parse("tel:0606060606");
Intent secondeActivite = new Intent(Intent.ACTION_DIAL, telephone);
startActivity(secondeActivite);
}

Pr. Yassine SADQI 11


Activité avec un intent implicite: Exemples

• Afficher une page Web


Uri uri = Uri.parse("http://www.google.com");

Intent it = new Intent(Intent.ACTION_VIEW,uri);

startActivity(it);

Pr. Yassine SADQI 12


Intent d’envoi et de réception de données

• Deux méthodes pour échanger les données avec les


intents: Intent
Composant
1. Données- une information dont l'emplacement de
Action
données peut être représenté par un URI
Catégorie
2. Extras: une ou plusieurs informations sous la
Données
forme d'une collection de paires valeur / clé dans
un ensemble Type

• Question: Quand utiliser Intent données (data) ou Extras


Intent extras ? Type

Pr. Yassine SADQI 13


Intent d’envoi et de réception de données

• Utiliser le champ intent data:


o Lorsque vous n'avez qu'une seule information à envoyer à l'activité démarrée.
o Lorsque cette information est un emplacement de données qui peut être représenté
par un URI.
• Utiliser intent extras :
o Si vous souhaitez transmettre plusieurs informations à l'activité démarrée.
o Si l'une des informations que vous souhaitez transmettre n'est pas exprimable par
un URI.

Pr. Yassine SADQI 14


Intent d’envoi et de réception de données

• Dans la première activité (envoi)


1) Créer l'objet intent
2) Mettre des données (intent data) ou des extras dans cet objet
3) Démarrer la nouvelle activité avec startActivity ()
• Dans la deuxième activité (réception) :
1) Récupère l'objet d’intent avec lequel l'activité a été démarrée
2) Récupérer les données ou les extras de l'objet Intent

Pr. Yassine SADQI 15


Intent d’envoi et de réception de données

• Pour ajouter des données à « intent data »,


1) créer l'objet intent :
 Intent msgIntent = new Intent(this, ShowMessageActivity.class);
2) Utiliser la méthode Intent setData (Uri data) avec un objet URI pour ajouter cet
URI à l’intent.
 Page web: msgIntent.setData( Uri.parse("http://www.google.com"));
 Fichier: msgIntent.setData(Uri.fromFile(new File("/sdcard/sample.jpg")));
3) Après avoir ajouté les données, vous pouvez démarrer l'activité avec l’intent comme
d'habitude.
 startActivity(msgIntent);

Pr. Yassine SADQI 16


Intent d’envoi et de réception de données

• Remarque:
osi vous appelez setData () plusieurs fois, seule la dernière valeur est
utilisée.
oUtiliser « intent extras » pour inclure des informations supplémentaires
(y compris les URI).

Pr. Yassine SADQI 17


Intent d’envoi et de réception de données

• Pour ajouter des données à Intent extras:


1. Déterminer les clés à utiliser pour les informations que vous souhaitez
ajouter aux extras (clés prédéfinis) ou définissez des nouveaux clés. Chaque
élément d'information a besoin de sa propre clé unique.
 La classe Intent inclut plusieurs clés que vous pouvez utiliser, définies comme
des constantes commençant par le mot EXTRA_
• Par exemple, Intent.EXTRA_EMAIL pour indiquer un tableau
d'adresses électroniques (en tant que chaînes)
2. Utiliser les méthodes putExtra () pour ajouter vos paires clé / valeur à
intent extras.

Pr. Yassine SADQI 18


Intent d’envoi et de réception de données

• On peut également définir nos propres clés.


• Généralement, vous définissez les clés supplémentaires comme des variables statiques dont les
noms commencent par « EXTRA_ ».
• Pour garantir que la clé est unique, la valeur de chaîne de la clé elle-même doit être préfixée
avec le nom de classe complet de votre application.
• Exemple:
public static final String EXTRA_MESSAGE_KEY =
"com.example.android.twoactivities.extra.MESSAGE";

Intent intent = new Intent(this, SecondActivity.class);


String message = "Hello Activity!";
intent.putExtra(EXTRA_MESSAGE_KEY, message);
startActivity(intent);
Pr. Yassine SADQI 19
Intent d’envoi et de réception de données

• En option, vous pouvez créer un objet Bundle, ajouter vos données à Bundle (ensemble),
puis ajouter le Bundle à l’intent.
• Bundle définit de nombreuses méthodes "put" pour différents types de données
primitives ainsi que des objets qui implémentent l'interface Parcelable d'Android ou
Serializable de Java.
• Exemple:
Bundle extras = new Bundle();
extras.putString(EXTRA_MESSAGE, "this is my message");
extras.putInt(EXTRA_POSITION_X, 100);
msgIntent.putExtras(extras);
startActivity(msgIntent);

Pr. Yassine SADQI 20


IV. Cycle de vie des Activités
Android

21
IV.1 Notion d’état

• Dans la journée un être humain peut passer d’un état à un autre suite à un événement particulier.

Evénement
Endormi Réveillé
• Une activité Android passe également par différents états.
• Entre chaque état, le système Android appelle certaines méthodes bien spécifiques, dans un ordre
bien déterminé.Vous connaissez déjà une de ces méthodes : onCreate().

Pr. Yassine SADQI 22


IV.1 Notion d’état

• Une Activité peut démarrer une autre Activité, par exemple, exécuter de nouvelles actions
• Les Activités sont organisées selon une pile (appelée Back ou Android Stack).
o l’Activité en cours d’exécution se situe au sommet de la pile
o lorsqu’une nouvelle Activité est démarrée, l’Activité courante est stoppée et la
nouvelle est placée au sommet de la pile et devient la seule Activité en mesure
d’interagir avec l’utilisateur
o lorsque l’Activité courante se termine, elle est dépilée et l’Activité suivante dans la pile
reprend la main

Pr. Yassine SADQI 23


IV.1 Notion d’état

• ⇒A un instant donné une est une seule Activité est exécutée


• chaque Activité est caractérisée par son état
• La gestion de différentes états d’une activité est appelée aussi gestion de cycle de vie
de l’activité.

Pr. Yassine SADQI 24


IV.2 Notion de cycle de vie d’une activité Android

• Le cycle de vie d’une activité Android est l'ensemble des états dans lesquels une activité peut
être active au cours de sa vie, depuis sa création jusqu'à sa destruction
• Plus formellement:
o Un graphe orienté de tous les états dans lesquels une activité peut être, et les fonctions de
rappels (callbacks) associés à la transition de chaque état au suivant.
• La technique de la fonction de rappel (callbacks functions) s'inspire du principe Hollywood ou
Inversion de contrôle “Don't call me, we will call you” où l'appelant laisse ses coordonnées
pour pouvoir être rappelé par la suite.
o L'intérêt est le passage à un modèle événementiel et modulaire.
• le système Android appelle automatiquement les callbacks correspondantes en fonction des
interactions utilisateurs (cliques, …)
Pr. Yassine SADQI 25
IV.2 Notion de cycle de vie d’une activité Android
• Lorsque une activité est créée par le système Android elle entre dans l'état « Created ».
• Au fil des interactions avec l’utilisateur, une activité peut être dans un des états suivants :
1. « Active (Active/Running) » : l'activité est lancée par l'utilisateur, elle s'exécute au premier
plan ;
2. « En Pause (Paused) » : l'activité est lancée par l'utilisateur, elle s'exécute est accessible, mais
elle n'est plus au premier plan. Une notification ou une autre activité lui a volé le focus et une
partie du premier plan ;
3. « Stoppée (Stopped)» : l'activité à été lancée par l'utilisateur, mais n'est plus au premier plan
et elle est invisible. L'activité ne peut interagir avec l'utilisateur qu'avec une notification ;
4. « A repris (Resumed) » : l'activité est en cours de revenir au premier plan
5. « Morte (Destroyed)» : l'activité n'est pas lancée et supprimé de mémoire de l'appareil.

Pr. Yassine SADQI 26


IV.3 États d'activité et visibilité

• Les modifications d'état sont déclenchées par les actions de l'utilisateur ou les
modifications de configuration (événements) telle que la rotation du périphérique.

Etat Visibilité
1) Créé (Created ) Pas encore visible

2) Démarré (Started ) Visible

3) En pause (Paused) Partiellement invisible

4) A repris(Resumed ) Visible

5) Arrêté (Stopped) Caché


6) Détruit (Destroyed) Disparu de la mémoire

Pr. Yassine SADQI 27


IV.4 Graphique d'états et de callbacks

Resumed
(Visible and active) onPause()
onResume()
onResume()
Started Paused
(Visible but not (partially visible) onStop()
active)
onStart()
onStart()
Stopped
onRestart() (hidden)
onCreate()
Created onDestroy()

Destroyed

Pr. Yassine SADQI 28


III. 5 Fonction de rappel (callbacks) et quand ils sont appelés

onCreate(Bundle savedInstanceState)—initialisation statique


onStart()—quand l'activité (écran) devient visible
onRestart()—appelé si l'activité a été arrêtée (appelle onStart ())
onResume()—l’activité est en cours d’interagir avec l'utilisateur
onPause()—sur le point de reprendre l'activité PRÉCÉDENTE
onStop()—n’est plus visible, mais existe toujours et toutes les informations d'état sont conservées
onDestroy()—dernier appel avant que le système Android détruit l'activité

Pr. Yassine SADQI 29


Doc android.app.Activity

• All activities will implement onCreate(Bundle) to do their initial setup; many will also
implement onPause() to commit changes to data and otherwise prepare to stop interacting with
the user. You should always call up to your superclass when implementing these
methods.
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);

protected void onStart();

protected void onRestart();

protected void onResume();

protected void onPause();


https://developer.android.com/reference/android/app/Activity
protected void onStop();

protected void onDestroy();


}

Pr. Yassine SADQI 30


Mouvement dans le cycle de vie

• En général, le mouvement dans le cycle de vie d'une activité ressemble à ceci:

Method Killable? Next


Killable: le processus
onCreate() NO onStart() hébergeant l'activité
onRestart() NO onStart() peut être tué par le
onStart() NO onResume()or onStop() système à tout moment
onResume() NO onPause() sans qu'une autre ligne
onPause() Yes onResume()or de son code ne soit
onStop() exécutée.
onStop() Yes onRestart()or
onDestroy()
onDestroy() Yes nothing

https://developer.android.com/guide/components/activities/activity-lifecycle
Pr. Yassine SADQI 31
TD2

Pr. Yassine SADQI 32

Vous aimerez peut-être aussi