19
Android 7 Les fondamentaux du développement d’applications Java Nazim BENBOURAHLA

Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

ISBN

: 97

8-2-

409-

0059

4-7

29,9

0 €

Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître et maîtriser le développement d’applications Java sur Android 7 (versions 7.0 et 7.1 - alias Nougat - au moment de l’écriture). Sa lecture nécessite des connaissances basiques en pro-grammation Java et XML mais aucun prérequis particulier sur Android.

Après une présentation de la plateforme Android et des principes de programmation qui lui sont spécifiques, vous apprendrez à installer et configurer l’environnement de développement (Android Studio et SDK Android). Vous évoluerez ensuite de façon progressive afin de connaître toutes les briques essentielles à la création d’applications Android. Ainsi, vous apprendrez à créer des interfaces de plus en plus complexes (layouts, ressources, toolbar, recyclerview, popups, webview, fragments, onglets, etc.), à gérer la navigation et la com-munication entre les différentes interfaces d’une application ou entre plusieurs applications. Vous apprendrez à créer des interfaces per-sonnalisées (gestion des thèmes, animations, police) et à gérer les différents évènements utilisateurs (clic, rotation, etc.). Vous appren-drez également à optimiser le code de l’application, ses interfaces, et à gérer la fragmentation de la plateforme (versions d’Android, taille et résolution des écrans, différences matérielles, etc.). Vous verrez comment récupérer des données nécessaires à une application (web-service, gestion de la connectivité, parsing Xml / Json), les stocker (sharedPreferences, fichiers, base de données SQLite) et les parta-ger avec d’autres applications (ContentProvider, Intent, etc.). Vous pourrez créer et interagir avec des cartes (Google Map, localisation, conversion position/adresse).

Enfin, vous apprendrez à gérer les différents traitements et interac-tions effectués dans une application et à identifier ceux qui doivent s’exécuter en tâches de fond (AsyncTask, Thread, Service, Broad-cast Receiver, Widget, etc.) ainsi que les méthodes d’accès aux dif-férentes fonctionnalités d’un appareil sous Android (appels, sms, caméra, accéléromètre, Bluetooth, etc.).

Environ 50 projets Android illustrant les différents exemples présen-tés dans le livre et directement importables dans Android Studio sont disponibles en téléchargement sur le site www.editions-eni.fr.

Android 7 - Les fondamentaux du développement d’applications Java

Pour plus d’informations :

Les chapitres du livre

Nazim BENBOURAHLA

Après une formation d’ingénieur en informatique, Nazim BENBOURAHLA intègre très vite un poste de déve-loppeur pour Android dans une socié-té de service. Aujourd’hui il est un membre reconnu de la communauté des développeurs pour Android : créa-teur et animateur du blog de tutoriaux tutos-android.com et professeur d’An-droid à l’EPITA. Il partage à travers les pages de ce livre toute son expertise et toute sa passion pour ce type de développement.

Avant-propos • La plateforme Android • Environnement  de  développement  • Principes de programmation • Ma pre-mière application : HelloAndroid • Créa-tion d’interfaces simples • Permission • Navigation et gestion des évènements • Débogage et gestion des erreurs • Per-sonnalisation  • Notifications  • Création d’interfaces  avancées  •  Persistance  et partage  de  données  •  Traitement  en tâche de fond • Webservice et Parsing • Google Maps et géolocalisation • Télé-phonie et matériel • Aller plus loin

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b Environ 50 projets Android.

Android 7 Les fondamentaux du développement

d’applications Java

Andr

oid

7 Le

s fo

ndam

enta

ux d

u dé

velo

ppem

ent

d’ap

plic

atio

ns J

ava

Nazim BENBOURAHLA

Page 2: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

1Table des matières

Avant-propos

Chapitre 1La plateforme Android

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2. Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3. Google Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.1 Création d'un compte développeur . . . . . . . . . . . . . . . . . . . . . . 163.2 Publication d'une application. . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3 Suivi et mise à jour d'une application . . . . . . . . . . . . . . . . . . . . 19

Chapitre 2Environnement de développement

1. Environnement Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2. Android Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3. SDK Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.3 Contenu du SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RI7AND dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 3: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

2Les fondamentaux du développement d’applications Java

Android 7

4. Émulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.2 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.2.1 Création d’un émulateur à partir d’Android Studio. . . . . 294.2.2 Création d’un émulateur en ligne de commande . . . . . . 34

4.3 Genymotion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Chapitre 3Principes de programmation

1. Architecture Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2. ART (Android RunTime). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3. NDK (Native Development Kit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4. APK (Android Package) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.1 Création d’un keystore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.2 Création d’un APK signé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

5. Gradle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

6. Composantes Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.1 Activity (activité) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.2 Fragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486.3 Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496.4 Broadcast receiver (récepteur d'évènement) . . . . . . . . . . . . . . . . 496.5 Content provider (fournisseur de contenu) . . . . . . . . . . . . . . . . 496.6 Intents (intentions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

6.6.1 Intent filters (filtres d’intention). . . . . . . . . . . . . . . . . . . . 506.7 La classe Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

7. Cycle de vie d'une activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527.1 État d’une activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527.2 Back stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537.3 Le cycle de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

8. Contexte d'une application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Page 4: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

3Table des matières

9. Manifeste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579.1 Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Chapitre 4Ma première application : HelloAndroid

1. Création du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

2. Architecture du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

3. Explications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653.1 Android Manifest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.2 Ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.3 Fichier généré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.4 Fichier source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

4. Résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Chapitre 5Création d'interfaces simples

1. Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731.1 Déclarer des identifiants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741.2 Spécifier la taille des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . 751.3 Combiner avec les activités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

2. Les layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772.1 FrameLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772.2 LinearLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782.3 RelativeLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822.4 GridLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862.5 ScrollView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.6 ConstraintLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Page 5: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

4Les fondamentaux du développement d’applications Java

Android 7

3. Les ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913.1 Drawable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913.2 Les valeurs (values) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

3.2.1 Les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . 923.2.2 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973.2.3 Les dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973.2.4 Les couleurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

4. Les éléments indispensables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.1 Zone d'affichage d'un texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.2 Zone d'édition d'un texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.3 Bouton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.4 Case à cocher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.5 Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024.6 Gestion du clic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

5. Liste et RecyclerView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045.1 ListeView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045.2 Création d'une liste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055.3 Personnalisation d’une liste . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.4 Mise à jour d’une liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.5 Optimisation d’une liste (ViewHolder) . . . . . . . . . . . . . . . . . . 1155.6 RecyclerView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185.7 CardView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

6. Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256.2 Couleur des barres de navigation . . . . . . . . . . . . . . . . . . . . . . . 1306.3 Gestion des anciennes versions . . . . . . . . . . . . . . . . . . . . . . . . . 1316.4 La navigation avec la Toolbar . . . . . . . . . . . . . . . . . . . . . . . . . . 133

7. Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Page 6: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

5Table des matières

Chapitre 6Permission

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

2. Demander une permission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

3. Déclarer vos permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Chapitre 7Navigation et gestion des évènements

1. Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

2. Navigation entre écrans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

3. Passage de données entre écrans . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1443.1 Obtenir un résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493.2 Parcelable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

4. Appeler d'autres applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

5. Exécuter une action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

6. Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Chapitre 8Débogage et gestion des erreurs

1. Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

2. Android Device Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

3. Les logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633.1 Logcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633.2 Utiliser les logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

4. Android Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

5. ADB (Android Debug Bridge) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

6. Débogage pas à pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Page 7: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

6Les fondamentaux du développement d’applications Java

Android 7

7. Interaction avec l'émulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1687.1 Simuler des actions sur l’émulateur . . . . . . . . . . . . . . . . . . . . . 168

8. Tests sur le téléphone. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1708.1 Utiliser votre téléphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

9. Options de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

10. Tests unitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

11. Tests fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

12. Monkey Stress Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

Chapitre 9Personnalisation

1. Material Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1791.1 Thèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

1.1.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1801.1.2 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

1.2 État des composants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1831.2.1 Les différents états . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1831.2.2 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

1.3 Dégradé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1851.4 Élévation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1881.5 Ripple Effect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

2. Polices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

3. Icônes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

4. Animations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1954.1 Tween Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1954.2 Frame Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1984.3 Animation de transition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

5. Gestion des évènements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015.1 Appui sur des touches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2015.2 Surveiller l’état de la saisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

Page 8: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

7Table des matières

5.3 Toucher l’écran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

6. Gestion de la rotation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2066.1 Gestion du mode paysage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2076.2 Bloquer la vue dans un seul mode . . . . . . . . . . . . . . . . . . . . . . . 2116.3 Gérer manuellement la rotation de l’écran . . . . . . . . . . . . . . . . 212

7. La bibliothèque de design de Google . . . . . . . . . . . . . . . . . . . . . . . . . 2137.1 Floating Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2137.2 TextInputLayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Chapitre 10Notifications

1. Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

2. Apparence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

3. Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2203.1 Créer une notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2203.2 Compatibilité avec les anciennes versions . . . . . . . . . . . . . . . . 224

4. Les actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

5. Répondre depuis une notification . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

6. Les priorités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

7. La visibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

8. La catégorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

9. Contenu de grande taille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

10. Android Wear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

11. Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

Page 9: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

8Les fondamentaux du développement d’applications Java

Android 7

Chapitre 11Création d'interfaces avancées

1. Fragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2351.1 Cycle de vie d’un fragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2361.2 La classe Fragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2371.3 Les fragments statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2371.4 Les fragments dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2451.5 Gestion des fragments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2471.6 Gestion des anciennes versions . . . . . . . . . . . . . . . . . . . . . . . . . 248

2. Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

3. ViewPager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.1 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.2 Onglets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

4. NavigationDrawer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

5. Les pop-ups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2625.1 Les toasts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2625.2 Snackbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2635.3 AlertDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2645.4 ProgressDialog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2655.5 Boîte de dialogue personnalisée . . . . . . . . . . . . . . . . . . . . . . . . . 267

6. WebView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2686.1 Exemple d'une page web distante . . . . . . . . . . . . . . . . . . . . . . . 2686.2 Paramètres de la WebView . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2696.3 Gestion du bouton retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2706.4 Utilisation de code natif dans du JavaScript. . . . . . . . . . . . . . . 270

7. Préférences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

8. Interfaces dynamiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

9. Création de vues personnalisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

Page 10: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

9Table des matières

Chapitre 12Persistance et partage de données

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

2. SharedPreferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

3. Stockage interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2863.1 Écriture d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2863.2 Lecture d’un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2873.3 Utilisation de fichiers de cache . . . . . . . . . . . . . . . . . . . . . . . . . 288

4. Stockage externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2884.1 Tester la disponibilité du stockage externe. . . . . . . . . . . . . . . . 2884.2 Accéder aux fichiers d’une application . . . . . . . . . . . . . . . . . . . 2904.3 Accéder aux fichiers partagés . . . . . . . . . . . . . . . . . . . . . . . . . . 291

5. Stockage en base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

6. ContentProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3026.1 Créer un ContentProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3036.2 Utiliser un ContentProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

7. Partager vos données avec d’autres applications . . . . . . . . . . . . . . . 311

8. Recevoir des données depuis d’autres applications . . . . . . . . . . . . . 313

Chapitre 13Traitement en tâche de fond

1. Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

2. AsyncTask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

3. Thread et Handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

4. Les services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3254.1 Créer et utiliser un service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3264.2 Lier un service à une activité . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

Page 11: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

10Les fondamentaux du développement d’applications Java

Android 7

5. Broadcast Receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3305.1 Recevoir un évènement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3305.2 Envoyer un évènement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

6. Alarme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3336.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3336.2 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

Chapitre 14Webservice et Parsing

1. Récupérer des données stockées en ligne . . . . . . . . . . . . . . . . . . . . . 3371.1 Se connecter au réseau Internet d’un appareil . . . . . . . . . . . . . 3371.2 Gestion du changement de connectivité. . . . . . . . . . . . . . . . . . 3381.3 Connexion à une adresse distante . . . . . . . . . . . . . . . . . . . . . . . 3391.4 Parsing XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3411.5 Parsing JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3431.6 Retrofit 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Chapitre 15Google Maps et géolocalisation

1. Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3491.1 Installation des API Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3491.2 Récupération de votre clé Google Maps . . . . . . . . . . . . . . . . . . 350

1.2.1 Génération de votre empreinte SHA-1 . . . . . . . . . . . . . . 3501.2.2 Récupération de votre clé. . . . . . . . . . . . . . . . . . . . . . . . . 352

2. Intégration d'une Google Map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3542.1 Création de la vue Google Maps . . . . . . . . . . . . . . . . . . . . . . . . 3542.2 Ajout d'options à la Google Map . . . . . . . . . . . . . . . . . . . . . . . 358

2.2.1 Définir le niveau de zoom . . . . . . . . . . . . . . . . . . . . . . . . 3582.2.2 Affichage en mode satellite . . . . . . . . . . . . . . . . . . . . . . . 358

3. Localisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

Page 12: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

11Table des matières

4. Placement d'un marqueur sur la carte . . . . . . . . . . . . . . . . . . . . . . . . 363

5. Conversion position/adresse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

Chapitre 16Téléphonie et matériel

1. Obtention d’informations sur les caractéristiques du téléphone . . 367

2. Gestion des appels et des messages . . . . . . . . . . . . . . . . . . . . . . . . . . 3682.1 Gestion des appels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

2.1.1 Passer un appel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3692.1.2 Gérer les appels entrants . . . . . . . . . . . . . . . . . . . . . . . . . 370

2.2 Gestion des messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3712.2.1 Envoi de SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3712.2.2 Réception d’un message . . . . . . . . . . . . . . . . . . . . . . . . . . 374

3. Caméra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3753.1 Utiliser l’application Caméra de l’appareil . . . . . . . . . . . . . . . . 3753.2 Contrôler la caméra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

4. Les capteurs sous Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3824.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3824.2 Accéléromètre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3834.3 Gyroscope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3874.4 Capteur magnétique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

5. Bluetooth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3905.1 Activer le Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3915.2 Permettre à d’autres appareils de se connecter . . . . . . . . . . . . 392

6. NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

7. TTS (Text To Speech) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

Page 13: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

12Les fondamentaux du développement d’applications Java

Android 7

Chapitre 17Aller plus loin

1. Widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4011.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4011.2 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

2. Gradle avancé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

3. Java 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

4. Firebase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

5. Bonnes pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4115.1 Être indépendant de la résolution de l’écran. . . . . . . . . . . . . . . 4115.2 Être indépendant de la taille de l’écran . . . . . . . . . . . . . . . . . . . 4115.3 Être indépendant de la version d'Android utilisée . . . . . . . . . . 4125.4 Être performant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

6. Optimiser ses interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4136.1 Inspecter la hiérarchie de ses interfaces . . . . . . . . . . . . . . . . . . 4136.2 Fusionner des layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4156.3 Inclure des vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4166.4 Chargement paresseux (Lazy Loading) des layouts . . . . . . . . . 417

7. Mise à jour d’une application vers Nougat . . . . . . . . . . . . . . . . . . . . 419

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

Page 14: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

73

Chapitre 5

Création d'interfaces simples

Création d'interfaces simples1. Les vues

La création d'une interface sous Android peut s'effectuer de deux manières :

– La création statique, qui s'effectue en XML.

– La création dynamique, qui s'effectue en Java.

Remarque

On peut combiner ces deux méthodes pour créer des interfaces plus com-plexes (cf. chapitre Création d'interfaces avancées - Interfaces dynamiques).

Une interface se compose :

– D'un ou plusieurs fichiers XML : ils représentent la partie statique d’uneinterface. Elle est constituée de différents éléments (bouton, texte, zoned'édition, etc.).

– D'un fichier JAVA (Activité) : il représente la partie dynamique d’uneinterface, les interactions utilisateur et les traitements à effectuer, etc.

Remarque

Tous les éléments basiques d’une vue (bouton, zone de texte...) héritent de laclasse View.

Page 15: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

© E

dit

ions

EN

I -

All r

ights

rese

rved

74Les fondamentaux du développement d’applications Java

Android 7

Modifier une vue peut s’effectuer de deux manières :

– Mettre à jour le code XML de l’interface (onglet Text sous Android Studio).

– Mettre à jour la vue à l’aide de l’éditeur d’interface (onglet Design sousAndroid Studio).

1.1 Déclarer des identifiants

Un identifiant correspond à un nom unique affecté à un élément d’une vue.Grâce à cet identifiant, vous pouvez mettre en place les interactions et lestraitements pour l’élément possédant cet identifiant.

Pour associer un identifiant à un élément d’une vue, il faut utiliser l’attributsuivant :

android:id="@+id/nom_identifiant"

La déclaration d'un identifiant se compose de plusieurs éléments :

– android:id : nom de l'attribut.

– @+ : indique la déclaration d’un nouvel identifiant.

– id : correspond à la catégorie « l'identifiant ».

– nom_identifiant : correspond à l’identifiant d’un élément.

La syntaxe suivante permet d'accéder à l'identifiant d'un élément depuis unfichier Java :

R.id.nom_identifiant

ou depuis un fichier XML :

@id/nom_identifiant

Page 16: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

75Création d'interfaces simplesChapitre 5

1.2 Spécifier la taille des éléments

À chaque déclaration d’un élément d’une vue (conteneur ou composant), vousdevez spécifier sa hauteur et sa largeur (android:layout_height etandroid:layout_width).

Vous pouvez spécifier ces valeurs de plusieurs manières :

– match_parent : signifie que la taille de l'élément est égale à celle de l'élé-ment parent.Par exemple, un bouton possédant une largeur définie à match_parentoccupera le même espace que son conteneur.

– wrap_content : signifie que la taille de l'élément est égale à celle de soncontenu.Par exemple, un bouton possédant une largeur définie à wrap_content aurapour taille la somme de la taille de son contenu et des différents espace-ments internes (padding).

– en spécifiant une valeur : vous pouvez définir la taille d'un élément àl'aide de valeurs fixes.

Remarque

Il faut spécifier la taille des éléments en dp (density-independent pixels) et nonen px. Les tailles spécifiées en dp conservent les mêmes proportions quelle

que soit la densité de l'écran.

1.3 Combiner avec les activités

Une fois la partie statique (xml) d’une interface déclarée, il faut créer uneclasse Java représentant votre activité.

Remarque

Chaque nouvelle activité créée doit être déclarée dans le manifeste del’application.

Page 17: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

© E

dit

ions

EN

I -

All r

ights

rese

rved

76Les fondamentaux du développement d’applications Java

Android 7

Cette classe doit :

– Hériter de la classe AppCompatActivity.

– Surcharger au minimum la méthode onCreate (cf. chapitre Principes deprogrammation - Cycle de vie d'une activité).

– Lier l’activité à l’interface à l'aide de la méthode setContentView.

dPour créer une nouvelle activité, faites un clic droit sur le dossier src de votreprojet, puis sélectionnez l’option New - Activity et choisissez le typed’activité que vous voulez créer (Blank Activity, Login Activity, etc.).

Prenons l'exemple d'une interface créée dans le fichier home.xml. Pourpouvoir la lier à une activité, la méthode onCreate doit contenir au minimumle code ci-dessous :

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.home);

}

Remarque

Vous pouvez remarquer l’utilisation du fichier R.java pour récupérer le layoutvoulu.

dN'oubliez pas de déclarer votre activité dans le fichier manifeste de votreapplication. La déclaration de nouveaux composants (activité, service...)s'effectue entre les balises <application>.

<activity android:name="chemin.package.MyNewActivity"

android:label="@string/activity_title">

dVous pouvez lui spécifier des propriétés ou comportements à l'aide desfiltres d'intention. Les filtres d'intention se divisent en plusieurs catégories :– Les actions (balise action) : permettent de spécifier des actions (compor-

tements) à un composant, par exemple : ACTION_CALL (pour passerun appel téléphonique), ACTION_MAIN (activité principale de l'appli-cation), ACTION_SEND (utilisé pour le partage de données), etc.

– Les données (balise data) : permettent de spécifier le type de donnéestraité par le composant.

Page 18: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

77Création d'interfaces simplesChapitre 5

– Les catégories (balise category) : permet de spécifier la catégorie du com-posant, par exemple CATEGORY_BROWSABLE (peut être invoqué parle navigateur pour afficher des données), CATEGORY_LAUNCHER(l'activité sera disponible depuis le lanceur d'application), etc.

– Les extras : représente des données additionnelles qui seront fournies àl'activité. Par exemple, pour l’envoi d’un e-mail, utiliser la cléEXTRA_EMAIL pour spécifier le destinataire du mail.

– Différents flags utiles à l'activité.

Par exemple :

<activity android:name=".MyActivity"

android:label="@string/activity_title">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

2. Les layouts

Les layouts facilitent l'organisation des différents éléments qui composentune interface. Ils servent de conteneur aux composantes d’une vue. Tous leslayouts Android héritent de la classe ViewGroup.

Remarque

La classe ViewGroup hérite de la classe View.

2.1 FrameLayout

Le Framelayout est le conteneur le plus simple, il représente un espace quiaffiche l’objet de votre choix.

Un élément ajouté à un FrameLayout se positionne en haut à gauche du layout.Vous pouvez changer cette position à l’aide de l’attribut android:gravity.

Page 19: Après une formation d’ingénieur en informatique, …...29,90 € ISBN : 978-2-409-00594-7 Ce livre est destiné aux développeurs, même débutants, qui sou-haitent connaître

© E

dit

ions

EN

I -

All r

ights

rese

rved

78Les fondamentaux du développement d’applications Java

Android 7

Vous avez la possibilité d'ajouter plusieurs éléments dans un mêmeFramelayout et de modifier la visibilité de ces éléments pour afficher ou cacherplusieurs éléments au même emplacement.

2.2 LinearLayout

Le LinearLayout permet d'aligner des éléments (dans l’ordre des déclarations)dans une direction (verticale ou horizontale).

Vous pouvez définir les attributs suivants :

– L'orientation du layout.

– La gravité des éléments.

– Le poids des éléments.

Orientation

À la création d’un LinearLayout, vous devez préciser son orientation (horizon-tale ou verticale) à l'aide de l'attribut android:orientation.

Remarque

L'orientation possède par défaut la valeur horizontale.

Positionnement d’un élément

Pour définir le positionnement d'un élément dans un LinearLayout, deuxattributs sont disponibles :

– layout_gravity : spécifie le positionnement d'un élément dans son conte-neur.

– gravity : spécifie le positionnement du contenu d'un élément (par exemple,on peut spécifier la position d'un texte dans un bouton).