ASSALE Adjé Louis Développement mobile Android 1
Développement Mobile
Développement Mobile
Outils de développement pour OS mobile
Outils de développement pour OS mobile
• 2 sortes d’outils
Frameworks natifs
Frameworks hybrides
• Frameworks natifs
Le développement natif est un développement
spécifique pour chaque OS de mobile (IOS, Android,
Windows, …)
Pour IOS on a :
 Xcode avec son langage Swift
 AppCode environnement de développement intégré (EDI)
utilisant les langages Objectice-C, Swift, C/C++, JavaScript,
HTML, XML, CSS
ASSALE Adjé Louis Développement mobile Android 2
Développement Mobile
Développement Mobile
Outils de développement pour OS mobile
Outils de développement pour OS mobile
• Frameworks natifs
Pour Android on a :
 Android Studio : environnement de développement utilisant
Java, Kotlin
 NetBeans, et Eclipse des environnements de développement
intégré (EDI) utilisant des SDK et ADT android
Pour Windows on a:
 Xamarin qui est intégré à l’EDI Visual Studio de Microsoft. Il
utilise le langage C# de .Net pour le développement
d’applications cross-plateformes
ASSALE Adjé Louis Développement mobile Android 3
Développement Mobile
Développement Mobile
Outils de développement pour OS mobile
Outils de développement pour OS mobile
• Frameworks hybrides
Le développement hybride permet un développement
unique pour servir différents OS. Un seul code est
développé, mais appel aux fonctions natives des devices
Les 4 principaux frameworks hybrides ou cross-
plateformes :
 ReactNative créé par FaceBook en 2015
 Ionic très populaire avec une grande communauté de
développeurs
 Flutter dernier entrant, créé par Google en 2018 avec aussi une
très grande communauté de développeurs
 Xamarin propriété de Microsoft, framework très en vue. Mais il
n’est pas Open Source comme les 3 précédents
ASSALE Adjé Louis Développement mobile Android 4
Android
Android
Généralités
Généralités
• Startup rachetée par Google en 2005
• Open Handset Alliance (OHA)
Regroupe + de 50 entreprises
 Fabricants de matériels
 Opérateurs mobiles
 Développeurs d’applications
 …
Objectif : développer des normes ouvertes pour des
applications de téléphonie mobile
• Matériel supportant Android : tablette, smartphone,
netbook, télévision, équipements embarqués
ASSALE Adjé Louis Développement mobile Android 5
Android
Android
Généralités
Généralités
• Points forts
Système Linux + Java
Projet open source
Système fonctionnel, intuitif et évolutif
SDK complet fourni
• Versions d’Android : 1.5 (Cupcake) – 1.6 (Donut) – 2.1
(Eclair) – 2.2 (Froyo) – 2.3 (Gingerbread) – 3.0
(honeycomb) – 4.0 (Ice Cream Sandwich) – 4.1 (Jelly
Bean) – 4.4 (KitKat) – 4.5 (liquorice Allsorts)
ASSALE Adjé Louis Développement mobile Android 6
Android
Android
Architecture
Architecture
ASSALE Adjé Louis Développement mobile Android 7
Android
Android
Architecture
Architecture
• Linux Kernel
 Le noyau linux fournit le pilotes matériels, la gestion de
processus, la mémoire, le réseau et la gestion de l’alimentation
• Les bibliothèques

J2SE (subset) : java.io.*, java.lang.*, ...
Android : android.view.*, android.telephony.*, ...
Google : com.google.android.maps.*
• Le moteur d’exécution Android
Offre les bases du framework applicatif
Utilise la machine virtuelle java Dalvik
ASSALE Adjé Louis Développement mobile Android 8
Android
Android
Architecture
Architecture
• Le framework applicatif
Fournit les classes utiles et des abstractions matérielles
• La couche applicative
IHM (interface graphiques) décrites en XML
Modèle de données et contrôleurs applicatifs écrits en java
ASSALE Adjé Louis Développement mobile Android 9
Android
Android
Machine Virtuelle « Dalvik »
Machine Virtuelle « Dalvik »
• Offre l'avantage de toute machine virtuelle
Couche d'abstraction entre le développeur d'applications et des
implémentations matérielles particulières
• La VM Dalvik n'est pas une VM Java
Tient compte des contraintes de CPU et mémoire
Exécute des fichiers .dex (Dalvik Executable) optimisés
• VM créé instance Dalvik pour chaque application (i.e.
processus lourd)
Les applications sont totalement indépendantes ("sandbox")
 Espaces protégés (mémoire, disque)
 Evite un plantage généralisé !
ASSALE Adjé Louis Développement mobile Android 10
Android
Android
Utilise un petit univers Java
Utilise un petit univers Java
• Concepts
Paquetage, classe, annotation, héritage, interface...
• Idiomes
Classes anonymes, classes internes, POJO...
• Bibliothèques(API)
J2SE (subset) : java.io.*, java.lang.*...
Android : android.view.*, android.telephony.*...
Google : com.google.android.maps.*...
• Design Patterns
Singleton, Builder, Observer (Listener), DAO..
ASSALE Adjé Louis Développement mobile Android 11
Android Studio
Android Studio
Outils de développement
Outils de développement
• JDK(Java Development Kit)
Télécharger la dernière version du JDK sur le site d’Oracle
 installer le JDK
• Android Studio
Télécharger celui contenant le SDK
SDK (Software Development Kit)
 API
 Émulateurs
 Débogueur, compilateur, empaqueteur, signature, analyseur statique de
code (Lint)
Installer Android Studio en suivant l’assistant
ASSALE Adjé Louis Développement mobile Android 12
Android Studio
Android Studio
Installation
Installation
• Type d’installation
ASSALE Adjé Louis Développement mobile Android 13
Android Studio
Android Studio
Installation
Installation
• Thème
ASSALE Adjé Louis Développement mobile Android 14
Android Studio
Android Studio
Installation
Installation
• Composants SDK
ASSALE Adjé Louis Développement mobile Android 15
Android Studio
Android Studio
Installation
Installation
• Vérifications
ASSALE Adjé Louis Développement mobile Android 16
Android Studio
Android Studio
Installation
Installation
• Téléchargement des composants
ASSALE Adjé Louis Développement mobile Android 17
Android Studio
Android Studio
Installation
Installation
• Fin
ASSALE Adjé Louis Développement mobile Android 18
Android Studio
Android Studio
Configuration post installation
Configuration post installation
• Lancer SDK Manager à partir du menu Tools > Android
> SDK Manager
Vérifier les éléments qui sont installés
 Version du SDK installée
 Version de l’API
 Version de l’OS qui permettra de développer
Installer les éventuelles mises à jour
 S’assurer de cocher au moins un Système Image pour l’émulateur
ASSALE Adjé Louis Développement mobile Android 19
Android Studio
Android Studio
Configuration post installation
Configuration post installation
• Lancer SDK Manager à partir du menu Tools > Android
> SDK Manager
ASSALE Adjé Louis Développement mobile Android 20
Android Studio
Android Studio
Configuration post installation
Configuration post installation
• Lancer SDK Manager à partir du menu Tools > Android
> SDK Manager
Dans l’onglet SDK Tools s’assurer d’avoir au moins
 Android SDK Build Tools
 Android SDK Tools
 Android Platform Tools
 Android Support Library
 Android Support Repository
 Google Repository
 Google Play Services
ASSALE Adjé Louis Développement mobile Android 21
Android Studio
Android Studio
Configuration post installation
Configuration post installation
• Lancer SDK Manager à partir du menu Tools > Android
> SDK Manager
ASSALE Adjé Louis Développement mobile Android 22
Android Studio
Android Studio
Configuration post installation
Configuration post installation
• Lancer SDK Manager à partir du menu Tools > Android
> SDK Manager
Pour les éventuelles mises à jour ou de nouveaux éléments à
installer
 Soit cocher ces éléments dans l’Android SDK et cliquer sur Apply
 Soit cliquer sur Launch Standalone SDK Manager
ASSALE Adjé Louis Développement mobile Android 23
Android Studio
Android Studio
Configuration post installation
Configuration post installation
• Lancement de Launch Standalone SDK Manager donne
Cocher les
éléments à
installer ou
à mettre à
jour
ASSALE Adjé Louis Développement mobile Android 24
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Faire Menu : File > New > New Projet
Choisir « Empty views Activity »
ASSALE Adjé Louis Développement mobile Android 25
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Menu: File > New > New Projet > Empty Views Activity
Donner un nom à l’application et remplir les autres champs
puis cliquer sur Next et cocher les options nécessaires
ASSALE Adjé Louis Développement mobile Android 26
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Les champs d’un projet
Application name : nom qui va apparaitre dans la liste des
applications sur l’appareil et dans Play Store
Company domain : qualifiant qui apparait dans le nom du
package
Package name : utilisé comme identifiant de l’application
Minimum required SDK : version Android la plus ancienne sur
laquelle l’application peut tourner. Éviter de remonter trop en
arrière, ça réduirait les fonctionnalités de l’application
ASSALE Adjé Louis Développement mobile Android 27
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Les composants d’une application
Activités : les différents écrans de l’application
Services : un composant qui s’exécute en tâche de
fond
Fournisseur de contenu : gestion et partage de
données
Receveur de broadcasts : réception de notifications
ASSALE Adjé Louis Développement mobile Android 28
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Communication entre composants
Les activités, les services et les receveurs de
broadcasts sont activés par des messages
asynchrones : les intents
Les fournisseurs de contenu sont activés par des
requêtes effectuées à l’aide d’un résolveur de contenu
Une requête est composée :
 d’une URI de la forme content://authority/path
 d’une action query, delete, insert ou update
ASSALE Adjé Louis Développement mobile Android 29
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Pour l’exécution de l’application
 on utilise soit un émulateur ici un Android virtual Device
(AVD) ou on se connecte à un appareil réel
Configuration d’un émulateur
 Menu Tools > Android AVD Manager puis Create Virtual Device
ASSALE Adjé Louis Développement mobile Android 30
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Pour l’exécution de l’application
Configuration d’un émulateur
 Choix de la
catégorie puis Next
ASSALE Adjé Louis Développement mobile Android 31
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Pour l’exécution de l’application
Configuration d’un émulateur
 Donne automa-
tiquement l’API
 Cliquer sur Next
ASSALE Adjé Louis Développement mobile Android 32
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Pour l’exécution de l’application
Configuration d’un émulateur
 Donner un nom à
l’AVD
 Cliquer sur Finish
ASSALE Adjé Louis Développement mobile Android 33
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Pour l’exécution de l’application sur émulateur
 cliquer sur le bouton d’exécution et choisir l’émulateur sur
lequel on souhaite exécuter l’application
ASSALE Adjé Louis Développement mobile Android 34
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Pour l’exécution de l’application sur appareil réel
Connexion à un appareil réel
 Relier le câble USB de l’appareil à l’ordinateur et si possible installer le
pilote
 Activer l’option de débogage USB sur l’appareil (pour les versions
supérieures à 4.2 voir dans Options pour les développeurs)
Lancement de l’exécution
 Sélectionner Choose a running device
 Une fois l’application compilée, un fichier .apk est créé dans le dossier
appbuildoutputsapk du répertoire de travail, c’est l’exécutable de
l’application
ASSALE Adjé Louis Développement mobile Android 35
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Hiérarchie des dossiers d’un projet
L’explorateur de projet
 Le fichier AndroidManifest.xml permet
au système de reconnaitre l’application
 Le dossier Java contient toutes les
classes créées dans le projet. Le fichier
principal (classe) est MainActivity.java
 Le sous-dossier res contient tout ce qui
touche à l’interface utilisateur
 layout regroupe fichier XML
définissant composants sur écran
- activity_main.xml définit apparence générale de l’activité :
disposition – taille – barre d’outils – éventuellement bouton d’action
flottant et son layout qui n’est autre que activity_main.xml
ASSALE Adjé Louis Développement mobile Android 36
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Hiérarchie des dossiers d’un projet
L’explorateur de projet
 activity_main.xml est le fichier à
manipuler pour disposer les
composants et créer l’interface
 drawable contient tout élément qui peut
être dessiné sur l’écran : images – formes
- animations – transitions – etc..
 menu contient les fichiers XML qui
définissent les menus
 mipmap contient images de l’icône de
l’application sous différentes résolutions
 values contient fichier XML définissant valeurs constantes (chaine de caractères,
dimensions, couleurs, styles, etc..)
ASSALE Adjé Louis Développement mobile Android 37
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Hiérarchie des dossiers d’un projet
L’explorateur de projet
 Gradle Scripts : système utilisé par
Android Studio pour compiler et générer
des applications. Android Studio crée :
 script pour chaque module
(build.gradle (Module:app)) du projet
 script pour le projet entier
(build.gradle (Project:mom_projet))
 build.gradle de l’application définit
version SDK de la compilation –
version minimale SDK nécessaire –
identifiant de l’application (nom du
package)
ASSALE Adjé Louis Développement mobile Android 38
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Disposition des composants
L’interface utilisateur constitué d’1certain nombre d’objets :
 Common : objets courants
 Text : zone d’affichage et saisie
 Buttons : types de boutons
 Widgets : groupe d’objet View
 Layout : conteunaires
ASSALE Adjé Louis Développement mobile Android 39
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Disposition des composants
Fichier activity_main.xml
 Les composants sont ajoutés par
glisser-déposer en mode design
 Il apparait automatiquement
dans le fichier activity_main.xml
 La balise <TextView> définit composant text placé sur le layout.
L’attribut android:text définit la chaine de caractère à afficher
ASSALE Adjé Louis Développement mobile Android 40
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Disposition des composants
Fichier activity_main.xml
 Disposition d’éléments par glisser-déposer nécessite 2 encrages aux
moins : Haut-Droite, Gauche-Bas, Haut-Droite ou Bas-Droite
Encrage « Haut-Droite »
pour fixer l’élément EditText
ASSALE Adjé Louis Développement mobile Android 41
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Disposition des composants
Fichier activity_main.xml
 Ajouter un <EditText> par glisser-déposer ou par code
 android:id : identifiant du composant
 android:layout_width|layout_height : largeur et hauteur du
composant – valeur wrap_content aussi large que nécessaire pour
s’adapter à la taille de son contenu – valeur match_parent prend la
taille de son parent (conteneur)
 android:hint : text par défaut à afficher, s’il est défini il faut ajouter
sa valeur dans resources <EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_weight="1“
android:hint="@string/str_chp_saisie" />
android:hint="@string/str_chp_saisie"
ASSALE Adjé Louis Développement mobile Android 42
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Disposition des composants
Fichier strings.xml du dossier « values » pour définir une
valeur
 Ouvrir le fichier strings.xml
 Ajouter la ligne :
<string name="str_chp_saisie">Entrer un texte</string>
<resources>
<string name="app_name">HelloWorld</string>
<string name="action_settings">Settings</string>
</resources>
<resources>
<string name="app_name">HelloWorld</string>
<string name="str_chp_saisie">Entrer un texte</
string>
<string name="action_settings">Settings</string>
</resources>
ASSALE Adjé Louis Développement mobile Android
43
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Disposition des composants
L’exécution donne
ASSALE Adjé Louis Développement mobile Android
44
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Disposition des composants
Fichier activity_main.xml
 Rajouter un <Button> dans le fichier layout
 Puis dans strings.xml rajouter une chaine de caractère qui s’appelle
"btn_envoyer" et qui vaut envoi
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Envoi"
android:id="@+id/btn_envoyer"
android:layout_weight="1" />
<resources>
<string name="app_name">HelloWorld</string>
<string name="str_chp_saisie">Entrer un texte </string>
<string name="btn_envoyer">Envoi </string>
<string name="action_settings">Settings</string>
</resources>
ASSALE Adjé Louis Développement mobile Android
45
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Disposition des composants
L’exécution donne
ASSALE Adjé Louis Développement mobile Android
46
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Réponse aux événements
Définir un attribut android:onClick pour le bouton en donnant
comme valeur le nom de la méthode à appeler dans fichier xml
Dans classe principale java implémenter la méthode
 Sans oublier les imports nécessaires
/** Méthode appelée quand on appuie sur Envoi */
public void envoiMessage (View view){
// le code de traitement ira ici
}
<Button
...
android:onClick="envoiMessage"
... />
ASSALE Adjé Louis Développement mobile Android
47
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Création et lancement d’une autre activité
Création de l’activité : File > New puis Activity et Empty
Views Activity et remplir les champs
ASSALE Adjé Louis Développement mobile Android
48
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Création et lancement d’une autre activité
Les fichiers suivants sont générés
 Main2Activity.java contenant le code java de la classe
 Les fichiers xml correspondant au layout de la nouvelle activité
 Un élément <Activity> dans le manifeste AndroidManifest.xml avec pour
valeurs d’attributs les informations saisies lors de la création
 Une chaine de caractères dans le fichier string.xml correspondant au titre
de l’activité
Lancement de l’activité
 Faire communiquer les 2 activités nécessite un Intent (Intention de faire
quelque chose)
 On crée l’Intent dans la méthode envoiMessage() de la classe principale
 Intent intent = new Intent(this, Main2Activity.class);
ASSALE Adjé Louis Développement mobile Android
49
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Création et lancement d’une autre activité
Lancement de l’activité
 On crée l’Intent dans la méthode envoiMessage() de la classe principale
 Intent intent = new Intent(this, Main2Activity.class);
 2 arguments : 1er
this objet faisant référence à l’application – 2ème
nom de l’activité qui reçoit l’intention
 On lance l’activité : startActivity(intent);
Communication entre activités
 1ère
activité doit envoyer texte saisi à la 2ème, on modifie le code de
envoiMessage comme suit :

public void envoiMessage (View view){
Intent intent = new Intent(this, Main2Activity.class);
EditText editText = (EditText) findViewById(R.id.chp_saisie);
String message = editText.getText().toString();
intent.putExtra(MESSAGE_SUPP, message);
startActivity(intent);
}
ASSALE Adjé Louis Développement mobile Android
50
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Création et lancement d’une autre activité
Communication entre activités
 findViewById retrouve un view à partir de son id
 Texte saisi est récupéré par la variable message
 Méthode putExtra() charge l’objet intent avec ce message
 Pour que la 2ème
activité puisse identifier et récupérer d’autres
données supplémentaires transportées par l’intention il faut définir
une constante publique ici MESSAGE_SUPP dans la classe
principale public class MainActivity extends AppCompatActivity {
public final static String MESSAGE_SUPP =
"android.com.example.assale.helloword.MESSAGE";
...
ASSALE Adjé Louis Développement mobile Android
51
Android Studio
Android Studio
Création d’un nouveau projet
Création d’un nouveau projet
• Création et lancement d’une autre activité
Récupérer et afficher le message
 Récupération : on ajoute le code suivant à la méthode onCreate()
 Affichage du message :
 on dépose un TextView puis on lui affecte le message
Intent intent = getIntent();
String message =
intent.getStringExtra(MainActivity.MESSAGE_SUPP);
TextView textView2 = findViewById(R.id.textView2);
textView2.setText(message);
ASSALE Adjé Louis Développement mobile Android 52
Android Studio
Android Studio
Travaux Pratiques
Travaux Pratiques
• 1. réaliser l’application suivante :
• 2. réaliser l’application suivante :
:
ASSALE Adjé Louis 53
Éléments d’un programme
Éléments d’un programme
Notion d’activité
Notion d’activité
• Cycle de vie d’une application
Android (activité)
Définit ce que le programme fait
A chaque étape du cycle de vie
correspond l'appel d'une méthode
que l'on peut surcharger pour
définir le comportement
correspondant à cette étape
ASSALE Adjé Louis Développement mobile Android 54
Éléments d’un programme
Éléments d’un programme
Notion d’activité
Notion d’activité
• Méthodes de la classe Activity
On fait : import android.app.activity
Méthodes correspondant au cycle de vie
 méthodes onXxx appelées au cours du cycle de vie. Si surchargées elles doivent
faire appel à leur homologue de la classe mère (super.OnXxx)
 onCreate(Bundle) appelé à la création. paramètre permet de récupérer état
sauvegardé lors de l'arrêt (si on a fait 1 sauvegarde)
 onPause() appelé quand l’activité n’est plus en 1er
plan
 onDestroy() appelé quand l’activité se termine
 onStart() appelé quand l’activité démarre
 onRestart() appelé quand l’activité redémarre
 onStop() appelé quand l’activité n’est plus visible
 onResume() appelé quand l’activité vient en 1er
plan
 finish() permet de terminer une activité
55
Éléments d’un programme
Éléments d’un programme
Notion d’activité
Notion d’activité
• Méthodes de la classe Activity
Méthodes relatives à l’interface
 setContentView(int) crée interface depuis un fichier XML, paramètre désigne
fichier par son identifiant
 findViewById(int) récupère un élément d’interface (renvoie un objet de classe
View), paraètre désigne cet élément par son identifiant
 showDialog(int) ouverture d’une fenêtre de dialogue par son identifiant
showDialog(int, Bundle) ouverture d’une fenêtre de dialogue par son identifiant, 2nd
paramètre permet de passer des paramètres
 dismissDialog(int) fermeture de fenêtre de dialogue par son identifiant
 onCreateDialog(int, Bundle) appelé lors d’ouverture d’une fenêtre de dialogue
 onPrepareDialog(int, Bundle) appelé lors de l’activation d’une fenêtre de Dialogue
déjà ouverte
 getCurrentFocus() renvoie élément ayant le actuellement le focus
 finish() permet de terminer une activité
56
Éléments d’un programme
Éléments d’un programme
Notion d’activité
Notion d’activité
Méthodes relatives aux menus et menus contextuels
 onCreateOptionMenu(Menu) appelé pour afficher le menu en paramètre
 onOptionsItemSelected(MenuItem) choix dans un menu de l’activité
 onOptionsMenuClosed(Menu) appelé pour fermer le menu en paramètre
 registerForContextMenu(View) associe un menu contextuel à l’élément
 unregisterForContextMenu(View) supprime l’association
 onCreateContextMenu(ContextMenu, View,
ContextMenu.ContextMenuInfo) affiche un menu contextuel. 1er
paramètre le menu, 2nd
l’interface auquel il est associé, 3ème
info sur
contenu de l’élément qui a causé l’apparition du menu contextuel
 onContextItemSelected(MenuItem) appelé lors d’un choix d’élément du
menu contextuel
 onContextMenuClosed(MenuContext) fermeture du menu contextuel
ASSALE Adjé Louis Développement mobile Android
57
Éléments d’un programme
Éléments d’un programme
Notion d’activité
Notion d’activité
Méthodes relatives à l’environnement et aux ressources
 getResources() renvoie objet de classe Resources permettant accès aux
ressources de l’application
 onUseInteraction() appelé à chaque interaction de l’utilisateur
 onBackPressed() appelé qd appuie sur touche retour arrière téléphone
 onLowerMemory() appelé qd niveau de batterie devient faible
 getFilesDir() renvoie objet de classe File représentant chemin des fichiers
propres à l’application
 openFileInput(String) objet FileInputStream correspondant à flux de lecture
connecté au fichier passé en paramètre
 onFileOutput(Sting, int) objet FileOutputStream pour flux d’écriture. 2nd
paramètre mode d’ouverture : MODE_PRIVATE (mode normal),
MODE_APPEND (ajout à un fichier existant), MODE_WORLD_READABLE
et MODE_WORLD_WRITEABLE (pour droit d’accès). | cumule +sieurs
attributs
58
Éléments d’un programme
Éléments d’un programme
Notion d’activité
Notion d’activité
Méthodes de lancement d’activités et de services
 startActivity(Intent) lance une autre activité passée en paramètre
 startActivityForResult(Intent, int) lance une autre activité dont on attend un retour.
2nd
paramètre permet d’identifier la réponse
 startNextMatchingActivity(Intent) lance une autre activité lorsque celle proposée
précédemment (en paramètre) n’a pas donné satisfaction.
 finishActivity(int) termine activité dont on attend un retour
 startService(Intent) lance le service passé en paramètre
 stopService(Intent) arrête le service passé en paramètre
 getIntent() renvoie objet de classe Intent associé à l’activité
 setResult(int) activité appelée renvoie code résultat à activité appelante
 setResult(int, Intent) comme précédemment avec 2nd
paramètre Intent contenant
valeurs de retour qui sera également renvoyé
 onActivityResult(int, int, Intent) méthode d’activité appelante exécutée qd activité
lancée se termine
59
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Application décrite par fichier XML AndroidManifeste
Ce fichier indique :
 Le SDK utilisé par balise uses-sdk
 Les permissions : balise uses-permission par autorisation demandée
 Les activités de l’application : une balise activity pour chaque activité,
contenant chacune une ou plusieurs balises intent-filter
 Les services de l’application : une balise service pour chaque service
contenant chacune une ou plusieurs balises intent-filter
 Les écouteurs d’intentions diffusées : une balise recevier pour chaque
écouteur contenant chacune une ou plusieurs balises intent-filter
 Les fournisseurs de contenus : une balise provider pour chaque activité
 Les bibliothèques utilisées : une balise uses-library pour chaque
bibliothèque
ASSALE Adjé Louis Développement mobile Android
60
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Forme générale du fichier XML AndroidManifeste
ASSALE Adjé Louis Développement mobile Android
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-sdk />
<uses-permission />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
</activity>
<service>
<intent-filter> . . . </intent-filter>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
</receiver>
<provider>
<grant-uri-permission />
</provider>
<uses-library />
</application>
</manifest>
61
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Activités
Balise <activity> décrit chq activité constituant une application
 Balise minimale de l’activité principale :
 Paramètres les plus souvent utilisés pour balise <activity> sont :
 name : désigne la classe de l’activité
 label : nom sous lequel elle apparaitra sur le terminal
 icon : icone à afficher sur le terminal
ASSALE Adjé Louis Développement mobile Android
<activity android:name=".ClasseDeLActivite"
android:label="nom_de_l_activite"
android:icon="@drawable/nom_du_fichier_icone">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
62
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Activités
Activité secondaire
 n’a pas de propriétés icon ni label
 Peut avoir balise <intent-filter> mais dans ce cas pas la propriété
<action android:name="android.intent.action.MAIN" />
Balise <intent-filter> indique ce que fait l’activité (intension)
 Permet de recherche activité répondant à spécification donnée fournit
par classe Intent
 Forme générale de la balise <Intent-filter> est :
<intent-filter>
<action android:name=“nom_d_action_1“ />
…
<action android:name=“nom_d_action_N“ />
<category android:name=“nom_de_categorie_1“ />
…
<category android:name=“nom_de_categorie_N“ />
<data android:mimeType=“nom_de_type_mime“
android:scheme=“protocole://hote:port/chemin“ />
</intent-filter>
63
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Activités
Balise <intent-filter> indique ce que fait l’activité (intension)
 On y trouve les rubriques suivantes :
 action indique le type d’action effectuée par l’activité (i.e.
affichage, édition)
 category indique la catégorie d’action (i.e. activité pouvant être
appelé par navigateur CATEGORY_BROWSABLE)
 data indique type de données transmises à l’activité lancée ou type
de réponse attendu ainsi que le protocole (http, content, file, …)
 Bien que le concepteur puisse définir ses propres valeurs de paramètres.
Il existe des valeurs prédéfinies pour ces diverses rubriques.
ASSALE Adjé Louis Développement mobile Android
64
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Activités
 Principales valeurs de rubriques action et category
 android.intent.action.VIEW affichage de données
 android.intent.action.EDIT affichage de données pour édition
 android.intent.action.MAIN activité principale d’une application
 android.intent.action.CALL appel téléphonique
 android.intent.action.WEB_SEARCH recherche sur le WEB
 android.intent.category.LAUNCHER activité proposée au lancement
 android.intent.category.DEFAULT activité pouvant être lancée
explicitement
 android.intent.category.BROWSABLE peut afficher une information
désignée par un lien
 android.intent.category.TAB activité associée dans un onglet d’interface
(TabHost)
65
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Permissions
Balise <uses-permission> pour autoriser accès à des ressources
 Les principales permissions sont :
 Géolocalisation (GPS)
 Accès aux données personnelles
ASSALE Adjé Louis Développement mobile Android
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_HISTORY_BOOKMARKS" />
<uses-permission android:name="android.permission.WRITE_HISTORY_BOOKMARKS" />
66
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Permissions
Balise <uses-permission> pour autoriser accès à des ressources
 Les principales permissions sont :
 Modification de paramètres
 Envoi et réception de SMS/MMS
ASSALE Adjé Louis Développement mobile Android
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.SET_TIME_ZONE" />
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
67
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Permissions
Balise <uses-permission> pour autoriser accès à des ressources
 Les principales permissions sont :
 Téléphonie
 Audio
ASSALE Adjé Louis Développement mobile Android
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
68
Éléments d’un programme
Éléments d’un programme
Manifeste
Manifeste
• Permissions
Balise <uses-permission> pour autoriser accès à des ressources
 Les principales permissions sont :
 Réseau
 Accès au matériel
ASSALE Adjé Louis Développement mobile Android
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
69
Éléments d’un programme
Éléments d’un programme
Ressources
Ressources
• Répertoires des ressources
Répertoire resources contient toutes les ressources qui seront
mise dans le fichier application (apk). Les sous-répertoires sont
 drawable: éléments dessinables sur l’écran, images – animations …
 layout: description en XML des interfces
 values: description en XML des valeurs (chaines, tableaux, …)
 menu: description en XML des menus de l’application
 xml: fichiers XML utilisés directement par l’application
 mipmap: images de l’icone de l’application sous différentes résolutions
 raw: autres types de ressources, fichiers texte – vidéo – son …
N.B. : il est possible de créer d’autres répertoires
ASSALE Adjé Louis Développement mobile Android
70
Éléments d’un programme
Éléments d’un programme
Ressources
Ressources
• Classe R de référencement des ressources
Classe générée contenant un identifiant pour chacun des
éléments trouvés dans les sous-répertoires de resources
 On pourra désigner dans la plupart des méthodes ces ressources par leur
identifiant dans cette classe R par : R.type.nom
 Par exemple une image "photo.png" placée dans drawable sera désignée
par R.image.photo
• Ressources de type valeurs
On peut définir des ressources de types valeurs (entiers,
chaines, booléans, etc. et des tableaux) dans des fichiers XML
<?xml version="1.0" encoding= "utf-8 "?>
<resources>
<color name= "coulfond">#AA7B03</color>
<integer name= "limite">567</integer>
<integer-array name= "codes_postaux">
71
Éléments d’un programme
Éléments d’un programme
Ressources
Ressources
• Ressources de type valeurs
<?xml version="1.0" encoding= "utf-8 "?>
<resources>
<color name= "coulfond">#AA7B03</color>
<integer name= "limite">567</integer>
<integer-array name= "codes_postaux">
<item>64100</item>
…
<item>33000</item>
</integer-array>
<string name= "titre">Un titre</string>
<string-array name= "planetes">
<item>Mercure</item>
…
<item>Venus</item>
</string-array>
<bool name="actif">true</bool>
<dimen name "taille">55px</dimen>
</resources>
72
Éléments d’un programme
Éléments d’un programme
Ressources
Ressources
• Utilisation des ressources
Utilisées dans fichier XML (description d’interfaces) ou dans
code java
Référencement de ressources dans un fichier XML
 "@[paquetage:]type/identificateur"
 Par exemple @String/machaine fait référence à une chaine décrite dans
un fichier XML du répertoire values par :
<string name="machaine">contenu de cette chaine</string>
Récupération d’une ressource dans le code
 Ressources désignées par identifiant dans la classe R : R.type.nom
 On peut obtenir une instance de la classe Resources par la méthode
getResources() de l’activité
ASSALE Adjé Louis Développement mobile Android
73
Éléments d’un programme
Éléments d’un programme
Ressources
Ressources
Récupération d’une ressource dans le code
 On accède aux ressources grâce aux méthodes de cet objet qui prend en
paramètre un identifiant de la forme R.type.nom :
 boolean getBoolean(int) renvoie le booléen désigné
 int getInteger(int) renvoie l'entier désigné
 int[] getIntArray(int) renvoie le tableau d'entiers désigné
 String getString(int) renvoie la chaîne désignée
 String[] getStringArray(int) renvoie le tableau de chaînes désigné
 int getColor(int) renvoie le code de la couleur désignée
 float getDimension(int) renvoie la valeur de l'unité désignée
 Drawable getDrawable(int) renvoie l'image désignée
 InputStream openRawResource(int) renvoie un flux de lecture sur
la ressource désignée.
ASSALE Adjé Louis Développement mobile Android
74
Éléments d’un programme
Éléments d’un programme
Ressources
Ressources
• Utilisation des ressources
Récupération d’une ressource dans le code
 Par exemple :
String titre = getResources().getString(R.string.texte_titre);
permet de récupérer la chaîne définie dans un fichier XML par :
<string name="texte_titre">…..</string>
• Uri : moyen pour désigner ressources
Uri faisant référence à ressources sur Internet
 Uri ressource = Uri.parse("http://.../chemin/nom_du_fichier");
 Par exemple: Uri.parse("http://www.inphb.ci/videos/ma_video.3gp");
Uri pour ressources locales
 Uri ressource = Uri.parse("android.resource://nom_paquetage_activité/"
+ R.chemin.mon_son);
75
Éléments d’un programme
Éléments d’un programme
Fichiers et Répertoires
Fichiers et Répertoires
• Répertoires d’Android
On fait : import android.os.Environment
 Méthodes de l’activité ou de l’environnement suivantes existent
 getFileDir() répertoire propre à l’application
 Environment.getDataDirectory() répertoire de données
 Environment.getDownLoadCacheDirectory() répertoire des
téléchargements
 Environment.getExternalStorageDirectory() répertoire de stockage
externe (en général sur carte SD)
 Environment.getRootDirectory() répertoire racine d’Android
 Toutes ces méthodes renvoient objet de classe File. Si c’est un
répertoire, il peut servir à ouvrir fichier par : File monfichier = new
File(repertoire, "nom_fichier");
ASSALE Adjé Louis Développement mobile Android
76
Éléments d’un programme
Éléments d’un programme
Fichiers et Répertoires
Fichiers et Répertoires
• La classe File
On fait : import java.io.File
Méthodes de la classe File
 Ouverture
 File(String chemin, String nom_fichier)
 File(File repertoire, String nom_fichier)
 File(URI uri)
 Création
 createNewFile() crée fichier correspondant à l’objet File
 Suppression
 delete() renvoie booléen true si destruction réussie
 deleteOnExit() fichier sera supprimé si machine virtuelle java se
termine normalement
ASSALE Adjé Louis Développement mobile Android
Éléments d’un programme
Éléments d’un programme
Fichiers et Répertoires
Fichiers et Répertoires
Méthodes de la classe File
 États
 exists() – canRead() – canWrite() – isDirectory() – isFile()
 isHiden() – length() – setReadOnly() position en lecture seule
 Noms
 getName() – getPath() – getAbsolutePath() – getCanonicalPath() chemin
relatif lève exception de la classe IOException
 toURI() renvoie fichier ou répertoire sous forme d’URI
 Répertoires
 list() liste de nom des fichiers contenus dans répertoire (String[])
 listFile() liste des fichiers contenus dans le répertoire (File[])
 mkdirs() crée le répertoire désigné par l’objet
Lecture/écriture dans un fichier
 On utilise flux de classes FileInputStream et FileOutputStream avec File
78
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Mise en place d’une interface
Peut se faire de façons
 Par description de l’interface dans fichier XML placé dans layout
 Par programme : référencé le fichier par
setContentView(R.layout.nom_fichier_XML)
 Forme générale du fichier XML
ASSALE Adjé Louis Développement mobile Android
<?xml version="1.0" encoding="utf-8"?>
<!— Commentaire -->
<Classe_du_conteneur_principal
xmlns:android="http://schemas.android.com/apk/res/android" propriétés du conteneur principal/>
<Classe de conteneur ou d'élément d'interface propriétés du conteneur ou de l'élément d'interface/>
…
<Classe de conteneur ou d'élément d'interface propriétés du conteneur ou de l'élément d'interface/>
</Classe_du_conteneur_principal>
79
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Mise en place d’une interface
 Lorsque l’un des éléments est un conteneur, on indique les éléments
qu’il contient
• Hiérarchie des classes pour les interfaces
ASSALE Adjé Louis Développement mobile Android
<Classe_de_conteneur propriétés du conteneur (voir ci-dessous) >
<Classe de conteneur ou d'élément d'interface propriétés du conteneur ou de l'élément d'interface/>
…
<Classe de conteneur ou d'élément d'interface propriétés du conteneur ou de l'élément d'interface/>
</Classe_du_conteneur>
80
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Hiérarchie des classes
pour les interfaces
• Propriétés et classe de bases
Unités exprimées en :
 pixels (px) – millimètres (mm) –
pouces (in) – points (pt)
Couleurs définies par
"#AARRVVBB"
 Code hexa pour transparence AA :
FF opaque – 00 transparent
 Composants (RVB) : RR, VV, BB
pour rouge, vert et bleue
ASSALE Adjé Louis Développement mobile Android
81
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Propriétés et classe de bases
Classe View:
 Classes View et ViewGroup pas utilisées directement constituent
classes mères des autres
 View classe dont héritent toutes les autres classes d’interfaces
 Propriétés positionnables en XML
 Identifiant : android:id="@+id/mon_id" permet de retrouver
l’élément par findViewById(R.id.mon_id)
 Visibilité : android:visibility="x" (x: visible, invisible ou gone)
invisible place conservée, gone place non conservée
 Fond : android:background="couleur" pour définir couleur ou
android:background="@drawable/monimage" pour utiliser image
placée dans res/drawable de nom monimage.t (t: png, jpg ou gif)
ASSALE Adjé Louis Développement mobile Android
82
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
Classe View:
 Propriétés positionnables en XML
 taille : android:minHeight="unité" et android:minWidth="unité"
hauteur et largeur minimale si possible
 Marges internes : android:marge="unité" où marge est
paddingBotton, paddingTop, paddingLeft et paddingRight
 Ascenseurs: android:fadeScrollbars="b" où b vaut true false selon
qu’on souhaite voir apparaitre ou non quand c’est pas utilisé,
android:scrollbarDefaultDelayBeforeFade="x" où x délai en ms
avant que ascenseurs non utilisés ne disparaissent,
android:scrollbarFadeDuration="x" où x durée d’effacement des
ascenseurs
 Événements : android:clickable="b" et android:longClickable="b"
où b vaut true ou false
ASSALE Adjé Louis Développement mobile Android
83
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
Classe View:
 Méthodes de la classe View : import android.view.View
 Construction : View(Context) paramètre l’activité elle-même
 Placements : setLayoutParams(ViewGroup.LayoutParams) définit le
placement des objets dans la vue
 Position : bringToFront() met la vue en 1er
plan, getLeft() – getTop()
– getRight() – getBottom() renvoie position en pixels de gauche –
haut – droite et bas de la vue
 Fond : setBackgroundColor(int) – setBackgroundResource(int) -
setBackgroundDrawable(Drawable) définit couleur du fond, fond à
partir d’un identificateur de ressource, image de fond
 Rafraichissement : requestLayout() provoque rafraichissement des
positions des éléments de la vue, invalidate() provoque un
rafraichissement de la vue
ASSALE Adjé Louis Développement mobile Android
84
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
Classe View:
 Méthodes de la classe View : import android.view.View
 Événements : setOnClickListener(OnClickListener) -
setOnLongClickListener(OnLongClickListener) -
setOnKeyListener(OnKeyListener) -
setOnTouchListener(OnTouchListener) associe un écouteur
d’événements aux clics, clics longs, actions du clavier et touchés
sur la vue
 Focus : isFocusable() renvoie true si la vue peut prendre le focus,
setFocusable(boolean) fait ou ne fait pas prendre le focus à la vue,
isFocusableInTouchMode() renvoie vraie si la vue peut prendre le
focus lorsqu’elle est touchée, setFocusableInTouchMode(boolean)
autorise ou non la vue à prendre le focus lorsqu’elle est touchée
ASSALE Adjé Louis Développement mobile Android
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
Classe ViewGroup:
 Propriétés positionnables en XML pour les éléments placés à l’intérieur
 Taille : android:layout_xxx="t" où xxx est height|width et t est unité ou
prendre les valeurs FILL_PARENT (oqp tout l’espace en hauteur/largeur)
ou WRAP_CONTENT (oqp ce qui est nécessaire)
 Marges externes : android:layout_xxxx="unité" où xxxx vaut
marginBottom, marginLeft, marginRight ou marginTop pour définir marge
externe en bas, gauche, droite ou haut
 Méthodes de la classe ViewGroup : import android.view.ViewGroup
 Construction : ViewGroup(Context) paramètre est l’activité
 Éléments du groupe : addView() ajoute un élément au groupe,
getChildCount() renvoie le nombre d’éléments, getFocusedChild() renvoie
qui a actuellement le focus, removeView(View) – removeAllViews() enlève
un ou tous les éléments du groupe
 Marges : setPadding (int, int, int, int) gauche, haut, droite et bas
86
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Événements traités par classes de base :
Interface OnClickListener :
 Définit écouteurs d’événements de type clic. Méthode à surcharger pour
traiter les événements est : onClick(View)
Interface OnLongClickListener :
 Définit écouteurs d’événements de type clic long. Méthode à surcharger
pour traiter les événements est : onLongClick(View)
Interface OnKeyListener :
 Définit écouteurs d’événements de type clavier. Méthode à surcharger
pour traiter les événements est : onKey(View, int, KeyEvent)
 2nd
paramètre code de touche tapée : KEYCODE_0 à KEYCODE_9
pour les chiffres, KEYCODE_A à KEYCODE_Z pour les lettres,
KEYCODE_xxxx ….
ASSALE Adjé Louis Développement mobile Android
87
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Événements traités par classes de base :
Interface OnKeyListener :
 3ème
paramètre classe KeyEvent associée aux événements clavier. Ses
méthodes sont : getAction() renvoie entier (ACTION_DOWN ou
ACTION_UP) pour action faite sur la touche, getRepeatCount()
nombre de répétition qd la touche est maintenue, getKeyCode() renvoie
code la touche, isAltPressed() - isShiftPressed() - isCtrlPressed() -
isCapsLockOn() - isNumLockOn() - isScrollLockOn() teste état des
touches de modifications
Interface OnTouchListener
 Définit écouteurs d’événements de type touché. Méthode à surcharger pour
traiter les événements est : onTouch(View, MotionEvent)
 2nd
paramètre classe MotionEvent associée aux événements de
déplacement (souris, écran tactile)
ASSALE Adjé Louis Développement mobile Android
88
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Événements traités par classes de base :
Interface OnKeyListener :
 2nd
paramètre classe MotionEvent associée aux événements de
déplacement (souris, écran tactile). Ses méthodes sont : getAction()
renvoie entier (ACTION_DOWN, ACTION_UP, ACTION_MOVE,
ACTION_OUTSIDE), getPressure() renvoie réel entre 0 et 1
indiquant force de pression du touché sur écran, getX() et getY()
réel entre-1 et 1 coordonnées en x et y, getXPrecision() et
getYPrecision() réel indiquant précision des coordonnées en x et y
Mise en œuvre des événements pour l’action des utilisateurs
 Il y a au moins 2 façons
 Via fichier XML
 Par enregistrement d’un écouteur (listener)
ASSALE Adjé Louis Développement mobile Android
89
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Événements traités par classes de base :
Mise en œuvre des événements pour l’action des utilisateurs
 Via fichier XML :
 dans fichier XML, on définit pour l’élément le nom de la méthode
de surcharge de l’événement à programmer. Par exemple clic sur
un bouton : on définit méthode de surcharge Valider()
 Dans le code : on définit ce que fait la méthode surchargée
ASSALE Adjé Louis Développement mobile Android
<Button
android:id="@+id/btn_valider"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/valider"
android:onClick="Valider" />
public void Valider(View btn) {
...
}
90
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Événements traités par classes de base :
Mise en œuvre des événements pour l’action des utilisateurs
 Enregistrement d’un écouteur (listener) : instance de classe possédant la
méthode public void onXXX(View v) spécifiée par l’interface
OnXXXListener. Cela peut être une classe anonyme ou privée. Dans
tous les cas on passe cette instance en paramètre de la méthode
setXXXListener de l’élément
 Classe anonyme, définit à la volée lors de l’appel à
setXXXListener
ASSALE Adjé Louis Développement mobile Android
Button btn = (Button) findViewById(R.id.btn_valider);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View btn) {
// faire quelque chose
}
});
91
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Événements traités par classes de base :
Mise en œuvre des événements pour l’action des utilisateurs
 Classe privée, on définit une classe privée dans l’activité qui
implémente l’interface OnXXXListener et en fournit une instance
en tant qu’écouteur.
ASSALE Adjé Louis Développement mobile Android
private class EcBtnValider implements OnClickListener {
public void onClick(View btn) {
// faire quelque chose
}
};
public void onCreate(...) {
...
Button btn=(Button)findViewById(R.id.btn_valider);
btn.setOnClickListener(new EcBtnValider());
}
92
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
Position et taille
 Définies par : android:layout_x="unité" – android:layout_y="unité" –
android:layout_height="t" – android:layout_width="t"
 Exemple :
ASSALE Adjé Louis
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="Essai placement"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|right"/>
</LinearLayout>
93
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
ImageView : zone pour afficher image
 Propriétés positionnables
 Contenu : android:src="couleur" pour définir une couleur ou
="@drawable/monimage" définir une image placée dans drawable
 Dimensions : android:tint="couleur" couleur qui teinte l’image,
android:adjusViewBounds="b" b à false taille de la zone
d’affichage correspond à celle de l’image
 Méthodes de la classe ImageView : import android.widget.ImageView
 Construction : ImageView(Context)
 Aspect : getDrawable() renvoie image du bouton,
setImageBitmap(Bitmap) – setImageDrawable(Drawable) –
setImageResource(int) définit l’image par son identificateur
ASSALE Adjé Louis Développement mobile Android
94
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
TextView : affichage de texte non éditable à priori
 Propriétés positionnables
 Contenu : android:text="texte à afficher" - android:int="initial" définir
texte à afficher quand zone est vide
 Taille et dimensions : android:textSize="unité" utiliser unité sp liée aux
polices, android:ems="x" x taille du texte en caractère
 Affichage : android:cursorVisible="b" - android:linksClickable="b"
rend ou pas liens cliquables, android:textIsSeletable="b" autorise ou
interdit sélection dans texte, android:editable="b" autorise ou pas la
modification du texte
 Couleurs et images : android:textColor="couleur" couleur de fond -
android:drawableBottom="couleur" ou ="@drawable/monimage"
couleur de fond du text ou image de fond
ASSALE Adjé Louis Développement mobile Android
95
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
TextView : affichage de texte non éditable à priori
 Méthodes de la classe TextView : import android.widget.TextView
 Construction : TextView(Context)
 Aspect : setCursorVisible(boolean), setEnabled(boolean),
getCurrentTextColor(), setTextColor(int), setHint(CharSequence)
définit texte à afficher quand la zone est vide.
 Manipulation du texte : getText(), setText(CharSequence),
append(CharSequence), length() longueur du texte, getLineCount()
nombre de ligne du texte, getSelectionStart() position début de
sélection, getSelectionEnd() position fin de sélection, hasSelection()
indique s’il y a ou pas de texte sélectionné
ASSALE Adjé Louis Développement mobile Android
96
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
TextView : affichage de texte non éditable à priori
 Événements de TextView :
 addTextChangedListener(TextWatcher) associe écouteur d’événements
aux modifications du texte. Interface TextWatcher possède méthodes à
surcharger suivantes: avant modification
beforeTextChanged(CharSequence, int, int, int), après modification
onTextChanged(CharSequence, int, int, int) les paramètres sont : le texte,
point de départ, nombre de caractères remplacés et nombre de caractères
de remplacement
 setOnEditorActionListener(TextView.OnEditorActionListener) associe un
écouteur d’événements aux actions. Interface
TextView.OnEditorActionListener possède méthode à surcharger :
onEditorAction(TextView, int, KeyEvent) appelée quand action effectuée
(tape de touche entrée par exemple)
97
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
TextView : affichage de texte non éditable à priori
 Événements de TextView :
 setKeyListener(KeyListener) associe un écouteur d’événements au
clavier. Interface KeyListener possède méthodes à surcharger :
onKeyDown(View, Editable, int, KeyEvent) appelée quand touche
est appuyée, onKeyUp(View, Editable, int, KeyEvent) appelée quand
touche est lâchée. Les paramètres sont : le TextView lui-même, le
texte, le code de la touche, l’événement clavier
EditText : idem TextView mais éditable par défaut
 Méthodes de la classe EditText : android.widget.EditText
 Construction : EditText(Context)
 Manipulation : getText(), selectAll(), setSelection(int start, int stop)
ASSALE Adjé Louis Développement mobile Android
98
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
AutoCompleteTextView : texte éditable proposant la complétion
 Propriétés de AutoCompleteTextView : idem TextView Plus
 android:completionHint="texte" texte affiché en titre du menu
déroulant
 android:completionThreshold="x" x nombre de caractères à taper
avant que complétion n’entre en action
 android:dropDownHeight="unité" android:dropDownWidth="unité"
définit la hauteur/largeur menu déroulant, unité peut être
FILL_PARENT ou WRAP_CONTENT
 android:dropDownHorizontalOffset="unité"
android:dropDownVerticalOffset="unité" décalage
horizontal/vertical du menu déroulant
ASSALE Adjé Louis Développement mobile Android
99
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
AutoCompleteTextView : texte éditable proposant la complétion
 Méthodes de AutoCompleteTextView :
 Construction : AutoCompleteTextView (Context)
 Aspect et contenu : showDropDown()/dismissDropDown() montre/
cache la liste, getListSelection()/setListSelection(int) renvoie rang
de proposition choisie ou choisit proposition pour son rang,
setAdapter(ArrayAdapter) remplit la liste de proposition. Classe
ArrayAdapter décrite dans ListView,
setCompletionHint(CharSequence) définit texte à afficher en titre
ASSALE Adjé Louis Développement mobile Android
100
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
AutoCompleteTextView : texte éditable proposant la complétion
 Événements de AutoCompleteTextView :
 setOnItemClickListener(AdapterView.OnItemClickListener) associe un
écouteur d’événements au clic sur un élément proposé. Méthode
onItemClick(AdapterView<?>, View, int, long) de l'interface
AdapterView.OnItemLongClickListener est surchargée pour traiter
l'événement. Le 3ème paramètre indique le rang de l'élément et le dernier son
identifiant.
 setOnItemSelectedListener(AdapterView.OnItemSelectedListener) associe
un écouteur d'événements à la sélection d'un élément. La méthode
onItemSelected (AdapterView<?>, View, int, long) de l'interface
AdapterView.OnItemSelectListener est surchargée pour traiter
l'événement. Méthode onNothingSelected(AdapterView<?>) est
surchargée pour traiter l'événement de non sélection.
101
Éléments d’un programme
Éléments d’un programme
Interfaces
Interfaces
• Les composants d’interface:
Button : texte éditable proposant la complétion
 Propriétés de Button : idem TextView
 Méthodes de la classe Button :
 Construction : Button(Context)
ImageButton
 Propriétés XML de ImageButton : idem ImageView
 Méthodes de la classe ImageButton : hérite de ImageView
 Idem toutes les autres méthodes sauf Constructeur
 Construction : ImageButton(Context)
ASSALE Adjé Louis Développement mobile Android
102
Éléments d’un programme
Éléments d’un programme
Travaux Pratiques N°2
Travaux Pratiques N°2
• Réaliser cette calculatrice:
ASSALE Adjé Louis Développement mobile Android

développement mobile sous Android Studio

  • 1.
    ASSALE Adjé LouisDéveloppement mobile Android 1 Développement Mobile Développement Mobile Outils de développement pour OS mobile Outils de développement pour OS mobile • 2 sortes d’outils Frameworks natifs Frameworks hybrides • Frameworks natifs Le développement natif est un développement spécifique pour chaque OS de mobile (IOS, Android, Windows, …) Pour IOS on a :  Xcode avec son langage Swift  AppCode environnement de développement intégré (EDI) utilisant les langages Objectice-C, Swift, C/C++, JavaScript, HTML, XML, CSS
  • 2.
    ASSALE Adjé LouisDéveloppement mobile Android 2 Développement Mobile Développement Mobile Outils de développement pour OS mobile Outils de développement pour OS mobile • Frameworks natifs Pour Android on a :  Android Studio : environnement de développement utilisant Java, Kotlin  NetBeans, et Eclipse des environnements de développement intégré (EDI) utilisant des SDK et ADT android Pour Windows on a:  Xamarin qui est intégré à l’EDI Visual Studio de Microsoft. Il utilise le langage C# de .Net pour le développement d’applications cross-plateformes
  • 3.
    ASSALE Adjé LouisDéveloppement mobile Android 3 Développement Mobile Développement Mobile Outils de développement pour OS mobile Outils de développement pour OS mobile • Frameworks hybrides Le développement hybride permet un développement unique pour servir différents OS. Un seul code est développé, mais appel aux fonctions natives des devices Les 4 principaux frameworks hybrides ou cross- plateformes :  ReactNative créé par FaceBook en 2015  Ionic très populaire avec une grande communauté de développeurs  Flutter dernier entrant, créé par Google en 2018 avec aussi une très grande communauté de développeurs  Xamarin propriété de Microsoft, framework très en vue. Mais il n’est pas Open Source comme les 3 précédents
  • 4.
    ASSALE Adjé LouisDéveloppement mobile Android 4 Android Android Généralités Généralités • Startup rachetée par Google en 2005 • Open Handset Alliance (OHA) Regroupe + de 50 entreprises  Fabricants de matériels  Opérateurs mobiles  Développeurs d’applications  … Objectif : développer des normes ouvertes pour des applications de téléphonie mobile • Matériel supportant Android : tablette, smartphone, netbook, télévision, équipements embarqués
  • 5.
    ASSALE Adjé LouisDéveloppement mobile Android 5 Android Android Généralités Généralités • Points forts Système Linux + Java Projet open source Système fonctionnel, intuitif et évolutif SDK complet fourni • Versions d’Android : 1.5 (Cupcake) – 1.6 (Donut) – 2.1 (Eclair) – 2.2 (Froyo) – 2.3 (Gingerbread) – 3.0 (honeycomb) – 4.0 (Ice Cream Sandwich) – 4.1 (Jelly Bean) – 4.4 (KitKat) – 4.5 (liquorice Allsorts)
  • 6.
    ASSALE Adjé LouisDéveloppement mobile Android 6 Android Android Architecture Architecture
  • 7.
    ASSALE Adjé LouisDéveloppement mobile Android 7 Android Android Architecture Architecture • Linux Kernel  Le noyau linux fournit le pilotes matériels, la gestion de processus, la mémoire, le réseau et la gestion de l’alimentation • Les bibliothèques  J2SE (subset) : java.io.*, java.lang.*, ... Android : android.view.*, android.telephony.*, ... Google : com.google.android.maps.* • Le moteur d’exécution Android Offre les bases du framework applicatif Utilise la machine virtuelle java Dalvik
  • 8.
    ASSALE Adjé LouisDéveloppement mobile Android 8 Android Android Architecture Architecture • Le framework applicatif Fournit les classes utiles et des abstractions matérielles • La couche applicative IHM (interface graphiques) décrites en XML Modèle de données et contrôleurs applicatifs écrits en java
  • 9.
    ASSALE Adjé LouisDéveloppement mobile Android 9 Android Android Machine Virtuelle « Dalvik » Machine Virtuelle « Dalvik » • Offre l'avantage de toute machine virtuelle Couche d'abstraction entre le développeur d'applications et des implémentations matérielles particulières • La VM Dalvik n'est pas une VM Java Tient compte des contraintes de CPU et mémoire Exécute des fichiers .dex (Dalvik Executable) optimisés • VM créé instance Dalvik pour chaque application (i.e. processus lourd) Les applications sont totalement indépendantes ("sandbox")  Espaces protégés (mémoire, disque)  Evite un plantage généralisé !
  • 10.
    ASSALE Adjé LouisDéveloppement mobile Android 10 Android Android Utilise un petit univers Java Utilise un petit univers Java • Concepts Paquetage, classe, annotation, héritage, interface... • Idiomes Classes anonymes, classes internes, POJO... • Bibliothèques(API) J2SE (subset) : java.io.*, java.lang.*... Android : android.view.*, android.telephony.*... Google : com.google.android.maps.*... • Design Patterns Singleton, Builder, Observer (Listener), DAO..
  • 11.
    ASSALE Adjé LouisDéveloppement mobile Android 11 Android Studio Android Studio Outils de développement Outils de développement • JDK(Java Development Kit) Télécharger la dernière version du JDK sur le site d’Oracle  installer le JDK • Android Studio Télécharger celui contenant le SDK SDK (Software Development Kit)  API  Émulateurs  Débogueur, compilateur, empaqueteur, signature, analyseur statique de code (Lint) Installer Android Studio en suivant l’assistant
  • 12.
    ASSALE Adjé LouisDéveloppement mobile Android 12 Android Studio Android Studio Installation Installation • Type d’installation
  • 13.
    ASSALE Adjé LouisDéveloppement mobile Android 13 Android Studio Android Studio Installation Installation • Thème
  • 14.
    ASSALE Adjé LouisDéveloppement mobile Android 14 Android Studio Android Studio Installation Installation • Composants SDK
  • 15.
    ASSALE Adjé LouisDéveloppement mobile Android 15 Android Studio Android Studio Installation Installation • Vérifications
  • 16.
    ASSALE Adjé LouisDéveloppement mobile Android 16 Android Studio Android Studio Installation Installation • Téléchargement des composants
  • 17.
    ASSALE Adjé LouisDéveloppement mobile Android 17 Android Studio Android Studio Installation Installation • Fin
  • 18.
    ASSALE Adjé LouisDéveloppement mobile Android 18 Android Studio Android Studio Configuration post installation Configuration post installation • Lancer SDK Manager à partir du menu Tools > Android > SDK Manager Vérifier les éléments qui sont installés  Version du SDK installée  Version de l’API  Version de l’OS qui permettra de développer Installer les éventuelles mises à jour  S’assurer de cocher au moins un Système Image pour l’émulateur
  • 19.
    ASSALE Adjé LouisDéveloppement mobile Android 19 Android Studio Android Studio Configuration post installation Configuration post installation • Lancer SDK Manager à partir du menu Tools > Android > SDK Manager
  • 20.
    ASSALE Adjé LouisDéveloppement mobile Android 20 Android Studio Android Studio Configuration post installation Configuration post installation • Lancer SDK Manager à partir du menu Tools > Android > SDK Manager Dans l’onglet SDK Tools s’assurer d’avoir au moins  Android SDK Build Tools  Android SDK Tools  Android Platform Tools  Android Support Library  Android Support Repository  Google Repository  Google Play Services
  • 21.
    ASSALE Adjé LouisDéveloppement mobile Android 21 Android Studio Android Studio Configuration post installation Configuration post installation • Lancer SDK Manager à partir du menu Tools > Android > SDK Manager
  • 22.
    ASSALE Adjé LouisDéveloppement mobile Android 22 Android Studio Android Studio Configuration post installation Configuration post installation • Lancer SDK Manager à partir du menu Tools > Android > SDK Manager Pour les éventuelles mises à jour ou de nouveaux éléments à installer  Soit cocher ces éléments dans l’Android SDK et cliquer sur Apply  Soit cliquer sur Launch Standalone SDK Manager
  • 23.
    ASSALE Adjé LouisDéveloppement mobile Android 23 Android Studio Android Studio Configuration post installation Configuration post installation • Lancement de Launch Standalone SDK Manager donne Cocher les éléments à installer ou à mettre à jour
  • 24.
    ASSALE Adjé LouisDéveloppement mobile Android 24 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Faire Menu : File > New > New Projet Choisir « Empty views Activity »
  • 25.
    ASSALE Adjé LouisDéveloppement mobile Android 25 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Menu: File > New > New Projet > Empty Views Activity Donner un nom à l’application et remplir les autres champs puis cliquer sur Next et cocher les options nécessaires
  • 26.
    ASSALE Adjé LouisDéveloppement mobile Android 26 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Les champs d’un projet Application name : nom qui va apparaitre dans la liste des applications sur l’appareil et dans Play Store Company domain : qualifiant qui apparait dans le nom du package Package name : utilisé comme identifiant de l’application Minimum required SDK : version Android la plus ancienne sur laquelle l’application peut tourner. Éviter de remonter trop en arrière, ça réduirait les fonctionnalités de l’application
  • 27.
    ASSALE Adjé LouisDéveloppement mobile Android 27 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Les composants d’une application Activités : les différents écrans de l’application Services : un composant qui s’exécute en tâche de fond Fournisseur de contenu : gestion et partage de données Receveur de broadcasts : réception de notifications
  • 28.
    ASSALE Adjé LouisDéveloppement mobile Android 28 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Communication entre composants Les activités, les services et les receveurs de broadcasts sont activés par des messages asynchrones : les intents Les fournisseurs de contenu sont activés par des requêtes effectuées à l’aide d’un résolveur de contenu Une requête est composée :  d’une URI de la forme content://authority/path  d’une action query, delete, insert ou update
  • 29.
    ASSALE Adjé LouisDéveloppement mobile Android 29 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Pour l’exécution de l’application  on utilise soit un émulateur ici un Android virtual Device (AVD) ou on se connecte à un appareil réel Configuration d’un émulateur  Menu Tools > Android AVD Manager puis Create Virtual Device
  • 30.
    ASSALE Adjé LouisDéveloppement mobile Android 30 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Pour l’exécution de l’application Configuration d’un émulateur  Choix de la catégorie puis Next
  • 31.
    ASSALE Adjé LouisDéveloppement mobile Android 31 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Pour l’exécution de l’application Configuration d’un émulateur  Donne automa- tiquement l’API  Cliquer sur Next
  • 32.
    ASSALE Adjé LouisDéveloppement mobile Android 32 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Pour l’exécution de l’application Configuration d’un émulateur  Donner un nom à l’AVD  Cliquer sur Finish
  • 33.
    ASSALE Adjé LouisDéveloppement mobile Android 33 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Pour l’exécution de l’application sur émulateur  cliquer sur le bouton d’exécution et choisir l’émulateur sur lequel on souhaite exécuter l’application
  • 34.
    ASSALE Adjé LouisDéveloppement mobile Android 34 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Pour l’exécution de l’application sur appareil réel Connexion à un appareil réel  Relier le câble USB de l’appareil à l’ordinateur et si possible installer le pilote  Activer l’option de débogage USB sur l’appareil (pour les versions supérieures à 4.2 voir dans Options pour les développeurs) Lancement de l’exécution  Sélectionner Choose a running device  Une fois l’application compilée, un fichier .apk est créé dans le dossier appbuildoutputsapk du répertoire de travail, c’est l’exécutable de l’application
  • 35.
    ASSALE Adjé LouisDéveloppement mobile Android 35 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Hiérarchie des dossiers d’un projet L’explorateur de projet  Le fichier AndroidManifest.xml permet au système de reconnaitre l’application  Le dossier Java contient toutes les classes créées dans le projet. Le fichier principal (classe) est MainActivity.java  Le sous-dossier res contient tout ce qui touche à l’interface utilisateur  layout regroupe fichier XML définissant composants sur écran - activity_main.xml définit apparence générale de l’activité : disposition – taille – barre d’outils – éventuellement bouton d’action flottant et son layout qui n’est autre que activity_main.xml
  • 36.
    ASSALE Adjé LouisDéveloppement mobile Android 36 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Hiérarchie des dossiers d’un projet L’explorateur de projet  activity_main.xml est le fichier à manipuler pour disposer les composants et créer l’interface  drawable contient tout élément qui peut être dessiné sur l’écran : images – formes - animations – transitions – etc..  menu contient les fichiers XML qui définissent les menus  mipmap contient images de l’icône de l’application sous différentes résolutions  values contient fichier XML définissant valeurs constantes (chaine de caractères, dimensions, couleurs, styles, etc..)
  • 37.
    ASSALE Adjé LouisDéveloppement mobile Android 37 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Hiérarchie des dossiers d’un projet L’explorateur de projet  Gradle Scripts : système utilisé par Android Studio pour compiler et générer des applications. Android Studio crée :  script pour chaque module (build.gradle (Module:app)) du projet  script pour le projet entier (build.gradle (Project:mom_projet))  build.gradle de l’application définit version SDK de la compilation – version minimale SDK nécessaire – identifiant de l’application (nom du package)
  • 38.
    ASSALE Adjé LouisDéveloppement mobile Android 38 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Disposition des composants L’interface utilisateur constitué d’1certain nombre d’objets :  Common : objets courants  Text : zone d’affichage et saisie  Buttons : types de boutons  Widgets : groupe d’objet View  Layout : conteunaires
  • 39.
    ASSALE Adjé LouisDéveloppement mobile Android 39 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Disposition des composants Fichier activity_main.xml  Les composants sont ajoutés par glisser-déposer en mode design  Il apparait automatiquement dans le fichier activity_main.xml  La balise <TextView> définit composant text placé sur le layout. L’attribut android:text définit la chaine de caractère à afficher
  • 40.
    ASSALE Adjé LouisDéveloppement mobile Android 40 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Disposition des composants Fichier activity_main.xml  Disposition d’éléments par glisser-déposer nécessite 2 encrages aux moins : Haut-Droite, Gauche-Bas, Haut-Droite ou Bas-Droite Encrage « Haut-Droite » pour fixer l’élément EditText
  • 41.
    ASSALE Adjé LouisDéveloppement mobile Android 41 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Disposition des composants Fichier activity_main.xml  Ajouter un <EditText> par glisser-déposer ou par code  android:id : identifiant du composant  android:layout_width|layout_height : largeur et hauteur du composant – valeur wrap_content aussi large que nécessaire pour s’adapter à la taille de son contenu – valeur match_parent prend la taille de son parent (conteneur)  android:hint : text par défaut à afficher, s’il est défini il faut ajouter sa valeur dans resources <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText" android:layout_weight="1“ android:hint="@string/str_chp_saisie" /> android:hint="@string/str_chp_saisie"
  • 42.
    ASSALE Adjé LouisDéveloppement mobile Android 42 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Disposition des composants Fichier strings.xml du dossier « values » pour définir une valeur  Ouvrir le fichier strings.xml  Ajouter la ligne : <string name="str_chp_saisie">Entrer un texte</string> <resources> <string name="app_name">HelloWorld</string> <string name="action_settings">Settings</string> </resources> <resources> <string name="app_name">HelloWorld</string> <string name="str_chp_saisie">Entrer un texte</ string> <string name="action_settings">Settings</string> </resources>
  • 43.
    ASSALE Adjé LouisDéveloppement mobile Android 43 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Disposition des composants L’exécution donne
  • 44.
    ASSALE Adjé LouisDéveloppement mobile Android 44 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Disposition des composants Fichier activity_main.xml  Rajouter un <Button> dans le fichier layout  Puis dans strings.xml rajouter une chaine de caractère qui s’appelle "btn_envoyer" et qui vaut envoi <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Envoi" android:id="@+id/btn_envoyer" android:layout_weight="1" /> <resources> <string name="app_name">HelloWorld</string> <string name="str_chp_saisie">Entrer un texte </string> <string name="btn_envoyer">Envoi </string> <string name="action_settings">Settings</string> </resources>
  • 45.
    ASSALE Adjé LouisDéveloppement mobile Android 45 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Disposition des composants L’exécution donne
  • 46.
    ASSALE Adjé LouisDéveloppement mobile Android 46 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Réponse aux événements Définir un attribut android:onClick pour le bouton en donnant comme valeur le nom de la méthode à appeler dans fichier xml Dans classe principale java implémenter la méthode  Sans oublier les imports nécessaires /** Méthode appelée quand on appuie sur Envoi */ public void envoiMessage (View view){ // le code de traitement ira ici } <Button ... android:onClick="envoiMessage" ... />
  • 47.
    ASSALE Adjé LouisDéveloppement mobile Android 47 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Création et lancement d’une autre activité Création de l’activité : File > New puis Activity et Empty Views Activity et remplir les champs
  • 48.
    ASSALE Adjé LouisDéveloppement mobile Android 48 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Création et lancement d’une autre activité Les fichiers suivants sont générés  Main2Activity.java contenant le code java de la classe  Les fichiers xml correspondant au layout de la nouvelle activité  Un élément <Activity> dans le manifeste AndroidManifest.xml avec pour valeurs d’attributs les informations saisies lors de la création  Une chaine de caractères dans le fichier string.xml correspondant au titre de l’activité Lancement de l’activité  Faire communiquer les 2 activités nécessite un Intent (Intention de faire quelque chose)  On crée l’Intent dans la méthode envoiMessage() de la classe principale  Intent intent = new Intent(this, Main2Activity.class);
  • 49.
    ASSALE Adjé LouisDéveloppement mobile Android 49 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Création et lancement d’une autre activité Lancement de l’activité  On crée l’Intent dans la méthode envoiMessage() de la classe principale  Intent intent = new Intent(this, Main2Activity.class);  2 arguments : 1er this objet faisant référence à l’application – 2ème nom de l’activité qui reçoit l’intention  On lance l’activité : startActivity(intent); Communication entre activités  1ère activité doit envoyer texte saisi à la 2ème, on modifie le code de envoiMessage comme suit :  public void envoiMessage (View view){ Intent intent = new Intent(this, Main2Activity.class); EditText editText = (EditText) findViewById(R.id.chp_saisie); String message = editText.getText().toString(); intent.putExtra(MESSAGE_SUPP, message); startActivity(intent); }
  • 50.
    ASSALE Adjé LouisDéveloppement mobile Android 50 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Création et lancement d’une autre activité Communication entre activités  findViewById retrouve un view à partir de son id  Texte saisi est récupéré par la variable message  Méthode putExtra() charge l’objet intent avec ce message  Pour que la 2ème activité puisse identifier et récupérer d’autres données supplémentaires transportées par l’intention il faut définir une constante publique ici MESSAGE_SUPP dans la classe principale public class MainActivity extends AppCompatActivity { public final static String MESSAGE_SUPP = "android.com.example.assale.helloword.MESSAGE"; ...
  • 51.
    ASSALE Adjé LouisDéveloppement mobile Android 51 Android Studio Android Studio Création d’un nouveau projet Création d’un nouveau projet • Création et lancement d’une autre activité Récupérer et afficher le message  Récupération : on ajoute le code suivant à la méthode onCreate()  Affichage du message :  on dépose un TextView puis on lui affecte le message Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.MESSAGE_SUPP); TextView textView2 = findViewById(R.id.textView2); textView2.setText(message);
  • 52.
    ASSALE Adjé LouisDéveloppement mobile Android 52 Android Studio Android Studio Travaux Pratiques Travaux Pratiques • 1. réaliser l’application suivante : • 2. réaliser l’application suivante : :
  • 53.
    ASSALE Adjé Louis53 Éléments d’un programme Éléments d’un programme Notion d’activité Notion d’activité • Cycle de vie d’une application Android (activité) Définit ce que le programme fait A chaque étape du cycle de vie correspond l'appel d'une méthode que l'on peut surcharger pour définir le comportement correspondant à cette étape
  • 54.
    ASSALE Adjé LouisDéveloppement mobile Android 54 Éléments d’un programme Éléments d’un programme Notion d’activité Notion d’activité • Méthodes de la classe Activity On fait : import android.app.activity Méthodes correspondant au cycle de vie  méthodes onXxx appelées au cours du cycle de vie. Si surchargées elles doivent faire appel à leur homologue de la classe mère (super.OnXxx)  onCreate(Bundle) appelé à la création. paramètre permet de récupérer état sauvegardé lors de l'arrêt (si on a fait 1 sauvegarde)  onPause() appelé quand l’activité n’est plus en 1er plan  onDestroy() appelé quand l’activité se termine  onStart() appelé quand l’activité démarre  onRestart() appelé quand l’activité redémarre  onStop() appelé quand l’activité n’est plus visible  onResume() appelé quand l’activité vient en 1er plan  finish() permet de terminer une activité
  • 55.
    55 Éléments d’un programme Élémentsd’un programme Notion d’activité Notion d’activité • Méthodes de la classe Activity Méthodes relatives à l’interface  setContentView(int) crée interface depuis un fichier XML, paramètre désigne fichier par son identifiant  findViewById(int) récupère un élément d’interface (renvoie un objet de classe View), paraètre désigne cet élément par son identifiant  showDialog(int) ouverture d’une fenêtre de dialogue par son identifiant showDialog(int, Bundle) ouverture d’une fenêtre de dialogue par son identifiant, 2nd paramètre permet de passer des paramètres  dismissDialog(int) fermeture de fenêtre de dialogue par son identifiant  onCreateDialog(int, Bundle) appelé lors d’ouverture d’une fenêtre de dialogue  onPrepareDialog(int, Bundle) appelé lors de l’activation d’une fenêtre de Dialogue déjà ouverte  getCurrentFocus() renvoie élément ayant le actuellement le focus  finish() permet de terminer une activité
  • 56.
    56 Éléments d’un programme Élémentsd’un programme Notion d’activité Notion d’activité Méthodes relatives aux menus et menus contextuels  onCreateOptionMenu(Menu) appelé pour afficher le menu en paramètre  onOptionsItemSelected(MenuItem) choix dans un menu de l’activité  onOptionsMenuClosed(Menu) appelé pour fermer le menu en paramètre  registerForContextMenu(View) associe un menu contextuel à l’élément  unregisterForContextMenu(View) supprime l’association  onCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo) affiche un menu contextuel. 1er paramètre le menu, 2nd l’interface auquel il est associé, 3ème info sur contenu de l’élément qui a causé l’apparition du menu contextuel  onContextItemSelected(MenuItem) appelé lors d’un choix d’élément du menu contextuel  onContextMenuClosed(MenuContext) fermeture du menu contextuel ASSALE Adjé Louis Développement mobile Android
  • 57.
    57 Éléments d’un programme Élémentsd’un programme Notion d’activité Notion d’activité Méthodes relatives à l’environnement et aux ressources  getResources() renvoie objet de classe Resources permettant accès aux ressources de l’application  onUseInteraction() appelé à chaque interaction de l’utilisateur  onBackPressed() appelé qd appuie sur touche retour arrière téléphone  onLowerMemory() appelé qd niveau de batterie devient faible  getFilesDir() renvoie objet de classe File représentant chemin des fichiers propres à l’application  openFileInput(String) objet FileInputStream correspondant à flux de lecture connecté au fichier passé en paramètre  onFileOutput(Sting, int) objet FileOutputStream pour flux d’écriture. 2nd paramètre mode d’ouverture : MODE_PRIVATE (mode normal), MODE_APPEND (ajout à un fichier existant), MODE_WORLD_READABLE et MODE_WORLD_WRITEABLE (pour droit d’accès). | cumule +sieurs attributs
  • 58.
    58 Éléments d’un programme Élémentsd’un programme Notion d’activité Notion d’activité Méthodes de lancement d’activités et de services  startActivity(Intent) lance une autre activité passée en paramètre  startActivityForResult(Intent, int) lance une autre activité dont on attend un retour. 2nd paramètre permet d’identifier la réponse  startNextMatchingActivity(Intent) lance une autre activité lorsque celle proposée précédemment (en paramètre) n’a pas donné satisfaction.  finishActivity(int) termine activité dont on attend un retour  startService(Intent) lance le service passé en paramètre  stopService(Intent) arrête le service passé en paramètre  getIntent() renvoie objet de classe Intent associé à l’activité  setResult(int) activité appelée renvoie code résultat à activité appelante  setResult(int, Intent) comme précédemment avec 2nd paramètre Intent contenant valeurs de retour qui sera également renvoyé  onActivityResult(int, int, Intent) méthode d’activité appelante exécutée qd activité lancée se termine
  • 59.
    59 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Application décrite par fichier XML AndroidManifeste Ce fichier indique :  Le SDK utilisé par balise uses-sdk  Les permissions : balise uses-permission par autorisation demandée  Les activités de l’application : une balise activity pour chaque activité, contenant chacune une ou plusieurs balises intent-filter  Les services de l’application : une balise service pour chaque service contenant chacune une ou plusieurs balises intent-filter  Les écouteurs d’intentions diffusées : une balise recevier pour chaque écouteur contenant chacune une ou plusieurs balises intent-filter  Les fournisseurs de contenus : une balise provider pour chaque activité  Les bibliothèques utilisées : une balise uses-library pour chaque bibliothèque ASSALE Adjé Louis Développement mobile Android
  • 60.
    60 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Forme générale du fichier XML AndroidManifeste ASSALE Adjé Louis Développement mobile Android <?xml version="1.0" encoding="utf-8"?> <manifest> <uses-sdk /> <uses-permission /> <application> <activity> <intent-filter> <action /> <category /> <data /> </intent-filter> </activity> <service> <intent-filter> . . . </intent-filter> </service> <receiver> <intent-filter> . . . </intent-filter> </receiver> <provider> <grant-uri-permission /> </provider> <uses-library /> </application> </manifest>
  • 61.
    61 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Activités Balise <activity> décrit chq activité constituant une application  Balise minimale de l’activité principale :  Paramètres les plus souvent utilisés pour balise <activity> sont :  name : désigne la classe de l’activité  label : nom sous lequel elle apparaitra sur le terminal  icon : icone à afficher sur le terminal ASSALE Adjé Louis Développement mobile Android <activity android:name=".ClasseDeLActivite" android:label="nom_de_l_activite" android:icon="@drawable/nom_du_fichier_icone"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
  • 62.
    62 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Activités Activité secondaire  n’a pas de propriétés icon ni label  Peut avoir balise <intent-filter> mais dans ce cas pas la propriété <action android:name="android.intent.action.MAIN" /> Balise <intent-filter> indique ce que fait l’activité (intension)  Permet de recherche activité répondant à spécification donnée fournit par classe Intent  Forme générale de la balise <Intent-filter> est : <intent-filter> <action android:name=“nom_d_action_1“ /> … <action android:name=“nom_d_action_N“ /> <category android:name=“nom_de_categorie_1“ /> … <category android:name=“nom_de_categorie_N“ /> <data android:mimeType=“nom_de_type_mime“ android:scheme=“protocole://hote:port/chemin“ /> </intent-filter>
  • 63.
    63 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Activités Balise <intent-filter> indique ce que fait l’activité (intension)  On y trouve les rubriques suivantes :  action indique le type d’action effectuée par l’activité (i.e. affichage, édition)  category indique la catégorie d’action (i.e. activité pouvant être appelé par navigateur CATEGORY_BROWSABLE)  data indique type de données transmises à l’activité lancée ou type de réponse attendu ainsi que le protocole (http, content, file, …)  Bien que le concepteur puisse définir ses propres valeurs de paramètres. Il existe des valeurs prédéfinies pour ces diverses rubriques. ASSALE Adjé Louis Développement mobile Android
  • 64.
    64 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Activités  Principales valeurs de rubriques action et category  android.intent.action.VIEW affichage de données  android.intent.action.EDIT affichage de données pour édition  android.intent.action.MAIN activité principale d’une application  android.intent.action.CALL appel téléphonique  android.intent.action.WEB_SEARCH recherche sur le WEB  android.intent.category.LAUNCHER activité proposée au lancement  android.intent.category.DEFAULT activité pouvant être lancée explicitement  android.intent.category.BROWSABLE peut afficher une information désignée par un lien  android.intent.category.TAB activité associée dans un onglet d’interface (TabHost)
  • 65.
    65 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Permissions Balise <uses-permission> pour autoriser accès à des ressources  Les principales permissions sont :  Géolocalisation (GPS)  Accès aux données personnelles ASSALE Adjé Louis Développement mobile Android <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.READ_HISTORY_BOOKMARKS" /> <uses-permission android:name="android.permission.WRITE_HISTORY_BOOKMARKS" />
  • 66.
    66 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Permissions Balise <uses-permission> pour autoriser accès à des ressources  Les principales permissions sont :  Modification de paramètres  Envoi et réception de SMS/MMS ASSALE Adjé Louis Développement mobile Android <uses-permission android:name="android.permission.SET_ORIENTATION" /> <uses-permission android:name="android.permission.SET_TIME_ZONE" /> <uses-permission android:name="android.permission.SET_WALLPAPER" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_MMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" />
  • 67.
    67 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Permissions Balise <uses-permission> pour autoriser accès à des ressources  Les principales permissions sont :  Téléphonie  Audio ASSALE Adjé Louis Développement mobile Android <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  • 68.
    68 Éléments d’un programme Élémentsd’un programme Manifeste Manifeste • Permissions Balise <uses-permission> pour autoriser accès à des ressources  Les principales permissions sont :  Réseau  Accès au matériel ASSALE Adjé Louis Développement mobile Android <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.BATTERY_STATS" />
  • 69.
    69 Éléments d’un programme Élémentsd’un programme Ressources Ressources • Répertoires des ressources Répertoire resources contient toutes les ressources qui seront mise dans le fichier application (apk). Les sous-répertoires sont  drawable: éléments dessinables sur l’écran, images – animations …  layout: description en XML des interfces  values: description en XML des valeurs (chaines, tableaux, …)  menu: description en XML des menus de l’application  xml: fichiers XML utilisés directement par l’application  mipmap: images de l’icone de l’application sous différentes résolutions  raw: autres types de ressources, fichiers texte – vidéo – son … N.B. : il est possible de créer d’autres répertoires ASSALE Adjé Louis Développement mobile Android
  • 70.
    70 Éléments d’un programme Élémentsd’un programme Ressources Ressources • Classe R de référencement des ressources Classe générée contenant un identifiant pour chacun des éléments trouvés dans les sous-répertoires de resources  On pourra désigner dans la plupart des méthodes ces ressources par leur identifiant dans cette classe R par : R.type.nom  Par exemple une image "photo.png" placée dans drawable sera désignée par R.image.photo • Ressources de type valeurs On peut définir des ressources de types valeurs (entiers, chaines, booléans, etc. et des tableaux) dans des fichiers XML <?xml version="1.0" encoding= "utf-8 "?> <resources> <color name= "coulfond">#AA7B03</color> <integer name= "limite">567</integer> <integer-array name= "codes_postaux">
  • 71.
    71 Éléments d’un programme Élémentsd’un programme Ressources Ressources • Ressources de type valeurs <?xml version="1.0" encoding= "utf-8 "?> <resources> <color name= "coulfond">#AA7B03</color> <integer name= "limite">567</integer> <integer-array name= "codes_postaux"> <item>64100</item> … <item>33000</item> </integer-array> <string name= "titre">Un titre</string> <string-array name= "planetes"> <item>Mercure</item> … <item>Venus</item> </string-array> <bool name="actif">true</bool> <dimen name "taille">55px</dimen> </resources>
  • 72.
    72 Éléments d’un programme Élémentsd’un programme Ressources Ressources • Utilisation des ressources Utilisées dans fichier XML (description d’interfaces) ou dans code java Référencement de ressources dans un fichier XML  "@[paquetage:]type/identificateur"  Par exemple @String/machaine fait référence à une chaine décrite dans un fichier XML du répertoire values par : <string name="machaine">contenu de cette chaine</string> Récupération d’une ressource dans le code  Ressources désignées par identifiant dans la classe R : R.type.nom  On peut obtenir une instance de la classe Resources par la méthode getResources() de l’activité ASSALE Adjé Louis Développement mobile Android
  • 73.
    73 Éléments d’un programme Élémentsd’un programme Ressources Ressources Récupération d’une ressource dans le code  On accède aux ressources grâce aux méthodes de cet objet qui prend en paramètre un identifiant de la forme R.type.nom :  boolean getBoolean(int) renvoie le booléen désigné  int getInteger(int) renvoie l'entier désigné  int[] getIntArray(int) renvoie le tableau d'entiers désigné  String getString(int) renvoie la chaîne désignée  String[] getStringArray(int) renvoie le tableau de chaînes désigné  int getColor(int) renvoie le code de la couleur désignée  float getDimension(int) renvoie la valeur de l'unité désignée  Drawable getDrawable(int) renvoie l'image désignée  InputStream openRawResource(int) renvoie un flux de lecture sur la ressource désignée. ASSALE Adjé Louis Développement mobile Android
  • 74.
    74 Éléments d’un programme Élémentsd’un programme Ressources Ressources • Utilisation des ressources Récupération d’une ressource dans le code  Par exemple : String titre = getResources().getString(R.string.texte_titre); permet de récupérer la chaîne définie dans un fichier XML par : <string name="texte_titre">…..</string> • Uri : moyen pour désigner ressources Uri faisant référence à ressources sur Internet  Uri ressource = Uri.parse("http://.../chemin/nom_du_fichier");  Par exemple: Uri.parse("http://www.inphb.ci/videos/ma_video.3gp"); Uri pour ressources locales  Uri ressource = Uri.parse("android.resource://nom_paquetage_activité/" + R.chemin.mon_son);
  • 75.
    75 Éléments d’un programme Élémentsd’un programme Fichiers et Répertoires Fichiers et Répertoires • Répertoires d’Android On fait : import android.os.Environment  Méthodes de l’activité ou de l’environnement suivantes existent  getFileDir() répertoire propre à l’application  Environment.getDataDirectory() répertoire de données  Environment.getDownLoadCacheDirectory() répertoire des téléchargements  Environment.getExternalStorageDirectory() répertoire de stockage externe (en général sur carte SD)  Environment.getRootDirectory() répertoire racine d’Android  Toutes ces méthodes renvoient objet de classe File. Si c’est un répertoire, il peut servir à ouvrir fichier par : File monfichier = new File(repertoire, "nom_fichier"); ASSALE Adjé Louis Développement mobile Android
  • 76.
    76 Éléments d’un programme Élémentsd’un programme Fichiers et Répertoires Fichiers et Répertoires • La classe File On fait : import java.io.File Méthodes de la classe File  Ouverture  File(String chemin, String nom_fichier)  File(File repertoire, String nom_fichier)  File(URI uri)  Création  createNewFile() crée fichier correspondant à l’objet File  Suppression  delete() renvoie booléen true si destruction réussie  deleteOnExit() fichier sera supprimé si machine virtuelle java se termine normalement ASSALE Adjé Louis Développement mobile Android
  • 77.
    Éléments d’un programme Élémentsd’un programme Fichiers et Répertoires Fichiers et Répertoires Méthodes de la classe File  États  exists() – canRead() – canWrite() – isDirectory() – isFile()  isHiden() – length() – setReadOnly() position en lecture seule  Noms  getName() – getPath() – getAbsolutePath() – getCanonicalPath() chemin relatif lève exception de la classe IOException  toURI() renvoie fichier ou répertoire sous forme d’URI  Répertoires  list() liste de nom des fichiers contenus dans répertoire (String[])  listFile() liste des fichiers contenus dans le répertoire (File[])  mkdirs() crée le répertoire désigné par l’objet Lecture/écriture dans un fichier  On utilise flux de classes FileInputStream et FileOutputStream avec File
  • 78.
    78 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Mise en place d’une interface Peut se faire de façons  Par description de l’interface dans fichier XML placé dans layout  Par programme : référencé le fichier par setContentView(R.layout.nom_fichier_XML)  Forme générale du fichier XML ASSALE Adjé Louis Développement mobile Android <?xml version="1.0" encoding="utf-8"?> <!— Commentaire --> <Classe_du_conteneur_principal xmlns:android="http://schemas.android.com/apk/res/android" propriétés du conteneur principal/> <Classe de conteneur ou d'élément d'interface propriétés du conteneur ou de l'élément d'interface/> … <Classe de conteneur ou d'élément d'interface propriétés du conteneur ou de l'élément d'interface/> </Classe_du_conteneur_principal>
  • 79.
    79 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Mise en place d’une interface  Lorsque l’un des éléments est un conteneur, on indique les éléments qu’il contient • Hiérarchie des classes pour les interfaces ASSALE Adjé Louis Développement mobile Android <Classe_de_conteneur propriétés du conteneur (voir ci-dessous) > <Classe de conteneur ou d'élément d'interface propriétés du conteneur ou de l'élément d'interface/> … <Classe de conteneur ou d'élément d'interface propriétés du conteneur ou de l'élément d'interface/> </Classe_du_conteneur>
  • 80.
    80 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Hiérarchie des classes pour les interfaces • Propriétés et classe de bases Unités exprimées en :  pixels (px) – millimètres (mm) – pouces (in) – points (pt) Couleurs définies par "#AARRVVBB"  Code hexa pour transparence AA : FF opaque – 00 transparent  Composants (RVB) : RR, VV, BB pour rouge, vert et bleue ASSALE Adjé Louis Développement mobile Android
  • 81.
    81 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Propriétés et classe de bases Classe View:  Classes View et ViewGroup pas utilisées directement constituent classes mères des autres  View classe dont héritent toutes les autres classes d’interfaces  Propriétés positionnables en XML  Identifiant : android:id="@+id/mon_id" permet de retrouver l’élément par findViewById(R.id.mon_id)  Visibilité : android:visibility="x" (x: visible, invisible ou gone) invisible place conservée, gone place non conservée  Fond : android:background="couleur" pour définir couleur ou android:background="@drawable/monimage" pour utiliser image placée dans res/drawable de nom monimage.t (t: png, jpg ou gif) ASSALE Adjé Louis Développement mobile Android
  • 82.
    82 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces Classe View:  Propriétés positionnables en XML  taille : android:minHeight="unité" et android:minWidth="unité" hauteur et largeur minimale si possible  Marges internes : android:marge="unité" où marge est paddingBotton, paddingTop, paddingLeft et paddingRight  Ascenseurs: android:fadeScrollbars="b" où b vaut true false selon qu’on souhaite voir apparaitre ou non quand c’est pas utilisé, android:scrollbarDefaultDelayBeforeFade="x" où x délai en ms avant que ascenseurs non utilisés ne disparaissent, android:scrollbarFadeDuration="x" où x durée d’effacement des ascenseurs  Événements : android:clickable="b" et android:longClickable="b" où b vaut true ou false ASSALE Adjé Louis Développement mobile Android
  • 83.
    83 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces Classe View:  Méthodes de la classe View : import android.view.View  Construction : View(Context) paramètre l’activité elle-même  Placements : setLayoutParams(ViewGroup.LayoutParams) définit le placement des objets dans la vue  Position : bringToFront() met la vue en 1er plan, getLeft() – getTop() – getRight() – getBottom() renvoie position en pixels de gauche – haut – droite et bas de la vue  Fond : setBackgroundColor(int) – setBackgroundResource(int) - setBackgroundDrawable(Drawable) définit couleur du fond, fond à partir d’un identificateur de ressource, image de fond  Rafraichissement : requestLayout() provoque rafraichissement des positions des éléments de la vue, invalidate() provoque un rafraichissement de la vue ASSALE Adjé Louis Développement mobile Android
  • 84.
    84 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces Classe View:  Méthodes de la classe View : import android.view.View  Événements : setOnClickListener(OnClickListener) - setOnLongClickListener(OnLongClickListener) - setOnKeyListener(OnKeyListener) - setOnTouchListener(OnTouchListener) associe un écouteur d’événements aux clics, clics longs, actions du clavier et touchés sur la vue  Focus : isFocusable() renvoie true si la vue peut prendre le focus, setFocusable(boolean) fait ou ne fait pas prendre le focus à la vue, isFocusableInTouchMode() renvoie vraie si la vue peut prendre le focus lorsqu’elle est touchée, setFocusableInTouchMode(boolean) autorise ou non la vue à prendre le focus lorsqu’elle est touchée ASSALE Adjé Louis Développement mobile Android
  • 85.
    Éléments d’un programme Élémentsd’un programme Interfaces Interfaces Classe ViewGroup:  Propriétés positionnables en XML pour les éléments placés à l’intérieur  Taille : android:layout_xxx="t" où xxx est height|width et t est unité ou prendre les valeurs FILL_PARENT (oqp tout l’espace en hauteur/largeur) ou WRAP_CONTENT (oqp ce qui est nécessaire)  Marges externes : android:layout_xxxx="unité" où xxxx vaut marginBottom, marginLeft, marginRight ou marginTop pour définir marge externe en bas, gauche, droite ou haut  Méthodes de la classe ViewGroup : import android.view.ViewGroup  Construction : ViewGroup(Context) paramètre est l’activité  Éléments du groupe : addView() ajoute un élément au groupe, getChildCount() renvoie le nombre d’éléments, getFocusedChild() renvoie qui a actuellement le focus, removeView(View) – removeAllViews() enlève un ou tous les éléments du groupe  Marges : setPadding (int, int, int, int) gauche, haut, droite et bas
  • 86.
    86 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Événements traités par classes de base : Interface OnClickListener :  Définit écouteurs d’événements de type clic. Méthode à surcharger pour traiter les événements est : onClick(View) Interface OnLongClickListener :  Définit écouteurs d’événements de type clic long. Méthode à surcharger pour traiter les événements est : onLongClick(View) Interface OnKeyListener :  Définit écouteurs d’événements de type clavier. Méthode à surcharger pour traiter les événements est : onKey(View, int, KeyEvent)  2nd paramètre code de touche tapée : KEYCODE_0 à KEYCODE_9 pour les chiffres, KEYCODE_A à KEYCODE_Z pour les lettres, KEYCODE_xxxx …. ASSALE Adjé Louis Développement mobile Android
  • 87.
    87 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Événements traités par classes de base : Interface OnKeyListener :  3ème paramètre classe KeyEvent associée aux événements clavier. Ses méthodes sont : getAction() renvoie entier (ACTION_DOWN ou ACTION_UP) pour action faite sur la touche, getRepeatCount() nombre de répétition qd la touche est maintenue, getKeyCode() renvoie code la touche, isAltPressed() - isShiftPressed() - isCtrlPressed() - isCapsLockOn() - isNumLockOn() - isScrollLockOn() teste état des touches de modifications Interface OnTouchListener  Définit écouteurs d’événements de type touché. Méthode à surcharger pour traiter les événements est : onTouch(View, MotionEvent)  2nd paramètre classe MotionEvent associée aux événements de déplacement (souris, écran tactile) ASSALE Adjé Louis Développement mobile Android
  • 88.
    88 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Événements traités par classes de base : Interface OnKeyListener :  2nd paramètre classe MotionEvent associée aux événements de déplacement (souris, écran tactile). Ses méthodes sont : getAction() renvoie entier (ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_OUTSIDE), getPressure() renvoie réel entre 0 et 1 indiquant force de pression du touché sur écran, getX() et getY() réel entre-1 et 1 coordonnées en x et y, getXPrecision() et getYPrecision() réel indiquant précision des coordonnées en x et y Mise en œuvre des événements pour l’action des utilisateurs  Il y a au moins 2 façons  Via fichier XML  Par enregistrement d’un écouteur (listener) ASSALE Adjé Louis Développement mobile Android
  • 89.
    89 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Événements traités par classes de base : Mise en œuvre des événements pour l’action des utilisateurs  Via fichier XML :  dans fichier XML, on définit pour l’élément le nom de la méthode de surcharge de l’événement à programmer. Par exemple clic sur un bouton : on définit méthode de surcharge Valider()  Dans le code : on définit ce que fait la méthode surchargée ASSALE Adjé Louis Développement mobile Android <Button android:id="@+id/btn_valider" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/valider" android:onClick="Valider" /> public void Valider(View btn) { ... }
  • 90.
    90 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Événements traités par classes de base : Mise en œuvre des événements pour l’action des utilisateurs  Enregistrement d’un écouteur (listener) : instance de classe possédant la méthode public void onXXX(View v) spécifiée par l’interface OnXXXListener. Cela peut être une classe anonyme ou privée. Dans tous les cas on passe cette instance en paramètre de la méthode setXXXListener de l’élément  Classe anonyme, définit à la volée lors de l’appel à setXXXListener ASSALE Adjé Louis Développement mobile Android Button btn = (Button) findViewById(R.id.btn_valider); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View btn) { // faire quelque chose } });
  • 91.
    91 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Événements traités par classes de base : Mise en œuvre des événements pour l’action des utilisateurs  Classe privée, on définit une classe privée dans l’activité qui implémente l’interface OnXXXListener et en fournit une instance en tant qu’écouteur. ASSALE Adjé Louis Développement mobile Android private class EcBtnValider implements OnClickListener { public void onClick(View btn) { // faire quelque chose } }; public void onCreate(...) { ... Button btn=(Button)findViewById(R.id.btn_valider); btn.setOnClickListener(new EcBtnValider()); }
  • 92.
    92 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: Position et taille  Définies par : android:layout_x="unité" – android:layout_y="unité" – android:layout_height="t" – android:layout_width="t"  Exemple : ASSALE Adjé Louis <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="Essai placement"/> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|right"/> </LinearLayout>
  • 93.
    93 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: ImageView : zone pour afficher image  Propriétés positionnables  Contenu : android:src="couleur" pour définir une couleur ou ="@drawable/monimage" définir une image placée dans drawable  Dimensions : android:tint="couleur" couleur qui teinte l’image, android:adjusViewBounds="b" b à false taille de la zone d’affichage correspond à celle de l’image  Méthodes de la classe ImageView : import android.widget.ImageView  Construction : ImageView(Context)  Aspect : getDrawable() renvoie image du bouton, setImageBitmap(Bitmap) – setImageDrawable(Drawable) – setImageResource(int) définit l’image par son identificateur ASSALE Adjé Louis Développement mobile Android
  • 94.
    94 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: TextView : affichage de texte non éditable à priori  Propriétés positionnables  Contenu : android:text="texte à afficher" - android:int="initial" définir texte à afficher quand zone est vide  Taille et dimensions : android:textSize="unité" utiliser unité sp liée aux polices, android:ems="x" x taille du texte en caractère  Affichage : android:cursorVisible="b" - android:linksClickable="b" rend ou pas liens cliquables, android:textIsSeletable="b" autorise ou interdit sélection dans texte, android:editable="b" autorise ou pas la modification du texte  Couleurs et images : android:textColor="couleur" couleur de fond - android:drawableBottom="couleur" ou ="@drawable/monimage" couleur de fond du text ou image de fond ASSALE Adjé Louis Développement mobile Android
  • 95.
    95 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: TextView : affichage de texte non éditable à priori  Méthodes de la classe TextView : import android.widget.TextView  Construction : TextView(Context)  Aspect : setCursorVisible(boolean), setEnabled(boolean), getCurrentTextColor(), setTextColor(int), setHint(CharSequence) définit texte à afficher quand la zone est vide.  Manipulation du texte : getText(), setText(CharSequence), append(CharSequence), length() longueur du texte, getLineCount() nombre de ligne du texte, getSelectionStart() position début de sélection, getSelectionEnd() position fin de sélection, hasSelection() indique s’il y a ou pas de texte sélectionné ASSALE Adjé Louis Développement mobile Android
  • 96.
    96 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: TextView : affichage de texte non éditable à priori  Événements de TextView :  addTextChangedListener(TextWatcher) associe écouteur d’événements aux modifications du texte. Interface TextWatcher possède méthodes à surcharger suivantes: avant modification beforeTextChanged(CharSequence, int, int, int), après modification onTextChanged(CharSequence, int, int, int) les paramètres sont : le texte, point de départ, nombre de caractères remplacés et nombre de caractères de remplacement  setOnEditorActionListener(TextView.OnEditorActionListener) associe un écouteur d’événements aux actions. Interface TextView.OnEditorActionListener possède méthode à surcharger : onEditorAction(TextView, int, KeyEvent) appelée quand action effectuée (tape de touche entrée par exemple)
  • 97.
    97 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: TextView : affichage de texte non éditable à priori  Événements de TextView :  setKeyListener(KeyListener) associe un écouteur d’événements au clavier. Interface KeyListener possède méthodes à surcharger : onKeyDown(View, Editable, int, KeyEvent) appelée quand touche est appuyée, onKeyUp(View, Editable, int, KeyEvent) appelée quand touche est lâchée. Les paramètres sont : le TextView lui-même, le texte, le code de la touche, l’événement clavier EditText : idem TextView mais éditable par défaut  Méthodes de la classe EditText : android.widget.EditText  Construction : EditText(Context)  Manipulation : getText(), selectAll(), setSelection(int start, int stop) ASSALE Adjé Louis Développement mobile Android
  • 98.
    98 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: AutoCompleteTextView : texte éditable proposant la complétion  Propriétés de AutoCompleteTextView : idem TextView Plus  android:completionHint="texte" texte affiché en titre du menu déroulant  android:completionThreshold="x" x nombre de caractères à taper avant que complétion n’entre en action  android:dropDownHeight="unité" android:dropDownWidth="unité" définit la hauteur/largeur menu déroulant, unité peut être FILL_PARENT ou WRAP_CONTENT  android:dropDownHorizontalOffset="unité" android:dropDownVerticalOffset="unité" décalage horizontal/vertical du menu déroulant ASSALE Adjé Louis Développement mobile Android
  • 99.
    99 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: AutoCompleteTextView : texte éditable proposant la complétion  Méthodes de AutoCompleteTextView :  Construction : AutoCompleteTextView (Context)  Aspect et contenu : showDropDown()/dismissDropDown() montre/ cache la liste, getListSelection()/setListSelection(int) renvoie rang de proposition choisie ou choisit proposition pour son rang, setAdapter(ArrayAdapter) remplit la liste de proposition. Classe ArrayAdapter décrite dans ListView, setCompletionHint(CharSequence) définit texte à afficher en titre ASSALE Adjé Louis Développement mobile Android
  • 100.
    100 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: AutoCompleteTextView : texte éditable proposant la complétion  Événements de AutoCompleteTextView :  setOnItemClickListener(AdapterView.OnItemClickListener) associe un écouteur d’événements au clic sur un élément proposé. Méthode onItemClick(AdapterView<?>, View, int, long) de l'interface AdapterView.OnItemLongClickListener est surchargée pour traiter l'événement. Le 3ème paramètre indique le rang de l'élément et le dernier son identifiant.  setOnItemSelectedListener(AdapterView.OnItemSelectedListener) associe un écouteur d'événements à la sélection d'un élément. La méthode onItemSelected (AdapterView<?>, View, int, long) de l'interface AdapterView.OnItemSelectListener est surchargée pour traiter l'événement. Méthode onNothingSelected(AdapterView<?>) est surchargée pour traiter l'événement de non sélection.
  • 101.
    101 Éléments d’un programme Élémentsd’un programme Interfaces Interfaces • Les composants d’interface: Button : texte éditable proposant la complétion  Propriétés de Button : idem TextView  Méthodes de la classe Button :  Construction : Button(Context) ImageButton  Propriétés XML de ImageButton : idem ImageView  Méthodes de la classe ImageButton : hérite de ImageView  Idem toutes les autres méthodes sauf Constructeur  Construction : ImageButton(Context) ASSALE Adjé Louis Développement mobile Android
  • 102.
    102 Éléments d’un programme Élémentsd’un programme Travaux Pratiques N°2 Travaux Pratiques N°2 • Réaliser cette calculatrice: ASSALE Adjé Louis Développement mobile Android