Chapitre 3 - 2023
Chapitre 3 - 2023
Chapitre 3 - 2023
native
• Cycles de vie
2
Vues et activités
3
Obtention des vues
La méthode setContentView charge une mise en page (layout) sur l’écran. Ensuite
l’activité peut avoir besoin d’accéder aux vues:
1. findViewById:
4
Propriétés des vues
La plupart des vues ont des setters et getters Java pour leurs
propriétés XML. Par exemple TextView.
En XML :
<TextView android:id="@+id/titre"
android:lines="2"
android:text="@string/debut" />
En Java :
TextView tvTitre = findViewById(R.id.titre);
tvTitre.setLines(2);
tvTitre.setText(R.string.debut);
6
Définition d’un écouteur
Il y a une autre manière de définir une réponse à un clic : un
écouteur (listener).
7
GESTION DES ÉVÈNEMENTS : LES « LISTENERS »
La gestion des évènements est assurée par des interfaces Java, dont
le scénario est:
8
Écouteur privé anonyme
Il s’agit d’une classe qui est définie à la volée, lors de l’appel à
setOnClickListener. Elle ne contient qu’une seule méthode.
9
Écouteur privé
Cela consiste à définir une classe privée dans l’activité ; cette classe
implémente l’interface OnClickListener ; et à en fournir une
instance en tant qu’écouteur.
10
L’activité elle-même en tant qu’écouteur
Il suffit de mentionner this comme écouteur et d’indiquer qu’elle
implémente l’interface OnClickListener.
break; }
}
12
Événements des vues courantes
13
Liste certaines interfaces des Listener Graphiques
14
Vues et activités
15
Composition d’une Application
19
Autorisations d’une application
Une application doit déclarer les autorisations dont elle a besoin :
accès à internet, caméra, carnet d’adresse, GPS, etc.
Cela se fait en rajoutant des élements dans le manifeste :
<manifest ... >
<uses-permission
android:name="android.permission.INTERNET" />
...
</manifest>
20
Démarrage d’une application
L’une des activités est marquée comme démarrable de l’extérieur :
21
Exemple
22
Activity
Une activité (Activity)= une IHM pour un cas d’utilisation (cf cours
UML).
Par exemple pour une application d’envoi de SMS :
Une activité pour choisir un contact dans le répertoire
Une activité pour la saisie de message
Une activité pour afficher le journal des envois
Du point de vue opérationnel :
Une activité doit hériter de la classe android.app.Activity
Une activité est indépendante des autres activités mais :
Il faut désigner une activité de départ (celle qui sera utilisé en 1er)
Il faut chainer les activités (une activité doit activer la suivante).
24
Démarrage d’une activité et Intents
Les activités sont démarrées à l’aide d’Intents.
Pour faire communiquer les deux activés il faut
passer par un Intent. Ce dernier représente
l’intention de faire quelque chose, et permet à
l’activité principale de lancer une autre activité
26
Structure d'un Intent
Un objet Intent contient les information (champs) suivantes:
le nom du composant ciblé (facultatif)
l'action à réaliser, sous forme de chaine de caractères
une catégorie pour cibler un type d'application
les données: contenu MIME et URI
des données supplémentaires (extra) sous forme de
paires
clef/valeur
des drapeaux (informations supplémentaires)
Exemples de méthodes utilisés par l’Intent
– addCategory(String category) ajout de catégories
– putExtra(String key,value)
– setFlags(flags) permission sur les données, relation activité/BackStack
28
Démarrage d’une activité et Intents
Exemple si l’activité principale demande de lancer l’activité
d’affichage par exemple.
33
Fonctionnement d’une application
Au début, le système Android lance l’activité qui est
marquée action=MAIN et catégorie=LAUNCHER dans
AndroidManifest.xml.
36
Extraction d’informations d’un Intent
22/ 47 37
Lancement avec attente de résultat
Pendant que les données sont transférées
vers SecondActivity, il n'y a aucun moyen
pour les données d'être transférées vers
SecondActivity d’être retourné à la première
activité (que nous appellerons
MainActivity).
Une activité est démarrée en tant que sous-activité en créant un
ActivityResultLauncher
Une instance ActivityResultLauncher est créée par un appel à la
méthode registerForActivityResult() et est passé à un gestionnaire de
rappel ActivityResultCallback sous la forme d'un lambda.
…..
38
Ce gestionnaire sera appelé et transmettra les données de retour
lorsque le retours de sous-activités.
Une fois qu'une instance ActivityResultLauncher a été créée, elle peut
être appelée avec une intention paramétré pour lancer la sous-activité.
Pour renvoyer des données à l'activité parent, la sous-
activité doit implémenter la méthode finish() dont le
but consiste à créer un nouvel objet d'intention
contenant les données à renvoyer, puis à appeler la
méthode setResult() de l’activité englobante, passant
par un code de résultat et l'intention contenant les
données de retour.
Le code résultat est généralement RESULT_OK ou
RESULT_CANCELED, mais il peut également s'agir d'une
valeur personnalisée soumise aux préférences du
développeur.Si une sous-activité plante, l'activité
parent recevra un code de résultat
RESULT_CANCELED: (dans SecondActivity)
DIFFUSER UNE INFORMATION
41
Contexte d’application
42
Définition d’un contexte d’application
Pour commencer, dériver une sous-classe de Application :
public class MonApplication extends Application
{
// variable globale de l'application
private int varglob;
// initialisation du contexte
@Override public void onCreate() {
super.onCreate();
varglob = 3;
}
}
43
Définition d’un contexte d’application, suite
Ensuite, la déclarer dans AndroidManifest.xml, dans l’attribut
android:name de l’élément <application>, mettre un point
devant :
<manifest xmlns:android="..." ...>
<application android:name=".MonApplication"
android:icon="@drawable/icon"
android:label="@string/app_name">
...
44
Définition d’un contexte d’application, fin
Enfin, l’utiliser dans n’importe laquelle des activités :
// récupérer le contexte d'application
MonApplication context =
(MonApplication) this.getApplicationContext();
26/ 47 45
Activité
46
Présentation
• Terminaison
Une activité se trouve dans l’un de ces états :
•active (resumed) : elle est sur le devant, l’utilisateur
peut jouer avec,
•en pause (paused) : partiellement cachée et inactive,
car une autre activité est venue devant,
•stoppée (stopped) : totalement invisible et inactive,
ses variables sont préservées mais elle ne
tourne plus. 47
Cycle de vie d’une activité
Ce diagramme résume les changement d’états d’une activité :
48
Événements de changement d’état
La classe Activity reçoit des événements de la part du système
Android, ça appelle des fonctions appelées callbacks.
Exemples :
49
onCreate()
50
onStart()
onRestart()
onPause()
onDestroy()
53
Squelette d’activité
// fermer la base
db.close();
}
55
Pause d’une activité
Cela arrive quand une nouvelle activité passe devant, exemple : un
appel téléphonique. Il faut libérer les ressources qui consomment de
l’énergie (animations, GPS. . . ).
57
Récapitulatif cycle de vie
@Override
public void onSaveInstanceState(Bundle etat)
{
// enregistrer l'état courant
etat.putInt(ETAT_SCORE, mScoreJoueur);
super.onSaveInstanceState(etat);
}
59
Restaurer l’état au lancement
La méthode onRestoreInstanceState reçoit un paramètre de
type Bundle (comme la méthode onCreate, mais dans cette
dernière, il peut être null). Il contient l’état précédemment
sauvé.
@Override
protected void onRestoreInstanceState(Bundle etat)
{ super.onRestoreInstanceState(etat);
// restaurer l'état précédent
mScoreJoueur = etat.getInt(ETAT_SCORE);
}
61
INTENTS IMPLICITES_APPEL TELPH
Button b = (Button)findViewById(R.id.Button01);
b.setOnClickListener(new OnClickListener() { public void
onClick(View v) {
Uri telnumber = Uri.parse("tel:0248484000");
Intent call = new Intent(Intent.ACTION_DIAL, telnumber);
startActivity(call);
} });
<uses-permission
android:name="android.permission.CALL_PHONE" >
</uses-permission>
62
LES INTENTS IMPLICITES- ENVOIE DE MAIL
63
LES INTENTS IMPLICITES- VOIR TOUS LES
CONTACTS
64
LES INTENTS IMPLICITES- VOIR UN CONTACT
PARTICULIER
65
LES INTENTS IMPLICITES- EDITER UN CONTACT
66
LES INTENTS IMPLICITES- RECHERCHE GOOGLE
67
LES INTENTS IMPLICITES- ENVOIE D’UN SMS
68
LES INTENTS IMPLICITES- AFFICHER PHOTOS
69
LES INTENTS IMPLICITES- VOIR PAGE WEB
70
LES INTENTS IMPLICITES- GEOLOCALISATION PAR
COORDONNÉES LONG/LAT
<uses-permission android:name="
android.permission.ACCESS_COARSE_LOCATI
ON " >
</uses-permission>
71
LES INTENTS IMPLICITES- LANCER MUSIC
PLAYER
72
LES INTENTS IMPLICITES- ECOUTER CHANSON
SUR CARTE SD
73
LES INTENTS IMPLICITES- PARAMETRES
SYSTEME
74