Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour...

26
Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4 e édition) Collection Expert IT Table des matières

Transcript of Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour...

Page 1: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

Editions ENI

AndroidGuide de développement d’applications Java

pour Smartphones et Tablettes

(4e édition)

CollectionExpert IT

Table des matières

Page 2: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

1Table des matières

Avant-propos

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2. À qui s'adresse cet ouvrage ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3. Connaissances nécessaires pour aborder cet ouvrage . . . . . . . . . . . . . 18

4. Objectifs à atteindre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5. Téléchargements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6. Informations complémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

7. Ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Chapitre 1L'univers Android

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2. Présentation d'Android. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.1 Open Handset Alliance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.2 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.3 Versions d'Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.3.1 Chronologie des versions . . . . . . . . . . . . . . . . . . . . . . . . . . 262.3.2 Répartition des distributions Android . . . . . . . . . . . . . . . 31

2.4 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3. Environnement de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.2 Android Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.2.1 Téléchargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

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 EI4AND dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 3: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

2Guide de développement d’applications Java

Android

Chapitre 2Premiers pas

1. Premier projet Android. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.1 Création du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.2 Organisation du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561.3 Compilation et exécution de l'application . . . . . . . . . . . . . . . . . 57

1.3.1 Sur l'émulateur Android. . . . . . . . . . . . . . . . . . . . . . . . . . . 571.3.2 Sur un appareil Android . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

2. Structure d'un projet Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.1 Structure du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.2 Gradle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

2.2.1 Configuration niveau projet . . . . . . . . . . . . . . . . . . . . . . . 702.2.2 Configuration niveau app . . . . . . . . . . . . . . . . . . . . . . . . . 71

2.3 Le manifeste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742.3.1 Balise manifest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772.3.2 Balise uses-sdk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782.3.3 Balise application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

2.4 Les ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

3. Qualification des ressources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.1 Écrans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.2 Internationalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893.3 Autres qualificatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

Chapitre 3Les bases de l'interface utilisateur

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

2. Concepts de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.1 Activités et Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.2 Mode programmatique et mode déclaratif . . . . . . . . . . . . . . . . . 982.3 Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

Page 4: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

3Table des matières

3. Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023.1 Création en mode déclaratif. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073.2 Création en mode programmatique . . . . . . . . . . . . . . . . . . . . . 111

4. Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1144.3 Découverte de quelques widgets . . . . . . . . . . . . . . . . . . . . . . . . 114

4.3.1 TextView (champ de texte) . . . . . . . . . . . . . . . . . . . . . . . 1154.3.2 EditText (champ de texte de saisie) . . . . . . . . . . . . . . . . 1184.3.3 Button (bouton) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.3.4 Autres widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

4.4 Première utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

5. Activités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275.2 Cycle de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

5.2.1 onCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305.2.2 onStart. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325.2.3 onResume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325.2.4 onPause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335.2.5 onStop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345.2.6 onRestart. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355.2.7 onDestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355.2.8 Récapitulatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

5.3 Lancement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385.4 Sauvegarde et restauration de l'état. . . . . . . . . . . . . . . . . . . . . . 1405.5 Pile d’activités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Page 5: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

4Guide de développement d’applications Java

Android

Chapitre 4Composants avancés

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

2. Fragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462.1 Intégration du fragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

2.1.1 Mode déclaratif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1472.1.2 Mode programmatique . . . . . . . . . . . . . . . . . . . . . . . . . . 1482.1.3 Bibliothèque de support . . . . . . . . . . . . . . . . . . . . . . . . . . 152

2.2 Fragments et mise en page adaptative . . . . . . . . . . . . . . . . . . . 1542.3 Cycle de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

2.3.1 onAttach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572.3.2 onCreateView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582.3.3 onActivityCreated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592.3.4 onDestroyView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592.3.5 onDetach. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

2.4 Sauvegarde et restauration de l'état . . . . . . . . . . . . . . . . . . . . . 1602.5 Pile de fragments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

3. Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633.1 Implémentation standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

3.1.1 Layout des éléments de la liste . . . . . . . . . . . . . . . . . . . . 1643.1.2 Adaptateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643.1.3 Implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

3.2 Implémentation spécifique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693.2.1 Layout des éléments de la liste . . . . . . . . . . . . . . . . . . . . 1703.2.2 Adaptateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

3.3 Interactions avec un composant ListView . . . . . . . . . . . . . . . . 1743.3.1 Sélection d’un élément. . . . . . . . . . . . . . . . . . . . . . . . . . . 1743.3.2 Mise à jour de la liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

3.4 Le composant Liste déroulante . . . . . . . . . . . . . . . . . . . . . . . . . 179

Page 6: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

5Table des matières

4. Créer ses propres composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1814.1 Surcharger un composant existant . . . . . . . . . . . . . . . . . . . . . . 181

4.1.1 Étendre une classe du package android.widget. . . . . . . . 1824.1.2 Intégrer le nouveau composant dans un layout . . . . . . . 1834.1.3 Ajouter des attributs personnalisés . . . . . . . . . . . . . . . . . 183

4.2 Réunir un ensemble de composants . . . . . . . . . . . . . . . . . . . . . 1864.3 Construire entièrement un composant. . . . . . . . . . . . . . . . . . . 187

4.3.1 Implémenter onDraw() . . . . . . . . . . . . . . . . . . . . . . . . . . 1874.3.2 Implémenter onMeasure() . . . . . . . . . . . . . . . . . . . . . . . . 1884.3.3 Obtenir les dimensions de l'écran . . . . . . . . . . . . . . . . . . 189

Chapitre 5Styles, navigation et notifications

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

2. Styles et thèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1912.1 Les styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1922.2 Notion de thème. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1932.3 Héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

3. Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1983.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1983.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2023.3 Menu d'activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

3.3.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2053.3.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

3.4 Menu contextuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2073.4.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2073.4.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

3.5 Menus pop-up. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

4. Barre d'action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2114.1 Intégration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

4.1.1 Dans le fichier de layout . . . . . . . . . . . . . . . . . . . . . . . . . 2124.1.2 Dans l’activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Page 7: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

6Guide de développement d’applications Java

Android

4.2 Personnalisation de la barre d’action. . . . . . . . . . . . . . . . . . . . . 2154.2.1 Images et titre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2154.2.2 Icône de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

5. Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2195.1 Toast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2195.2 Boîte de dialogue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

5.2.1 Tour d'horizon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2235.2.2 Boîte de dialogue d'alerte . . . . . . . . . . . . . . . . . . . . . . . . . 224

5.3 Barre de notification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2295.3.1 Création d'une notification basique . . . . . . . . . . . . . . . . 2295.3.2 Compléter une notification . . . . . . . . . . . . . . . . . . . . . . . 2375.3.3 Interagir avec une notification . . . . . . . . . . . . . . . . . . . . 241

Chapitre 6Interface utilisateur avancée

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

2. Mise en page complexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2462.1 Choix du layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2462.2 Positionnement relatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2472.3 Utiliser les poids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2492.4 Utiliser les ressources « dimension » . . . . . . . . . . . . . . . . . . . . . 2542.5 Travailler avec le constraintLayout . . . . . . . . . . . . . . . . . . . . . . 256

3. Utiliser le Navigation Drawer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2623.1 Mettre en place le panneau de navigation . . . . . . . . . . . . . . . . 2633.2 Utiliser le panneau de navigation . . . . . . . . . . . . . . . . . . . . . . . 266

3.2.1 Détecter les événements d'ouverture/fermeture . . . . . . 2663.2.2 Navigation Drawer et ActionBar. . . . . . . . . . . . . . . . . . . 2673.2.3 Forcer l'ouverture du panneau

au lancement de l'activité. . . . . . . . . . . . . . . . . . . . . . . . . 2683.3 Remplir le panneau de navigation. . . . . . . . . . . . . . . . . . . . . . . 269

Page 8: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

7Table des matières

4. Créer des images redimensionnables . . . . . . . . . . . . . . . . . . . . . . . . . 2724.1 Les images 9-patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

4.1.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2724.1.2 Créer des images 9-patch . . . . . . . . . . . . . . . . . . . . . . . . . 274

4.2 Les drawables XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2804.2.1 Définir une forme en XML . . . . . . . . . . . . . . . . . . . . . . . 2804.2.2 Modifier la forme initiale . . . . . . . . . . . . . . . . . . . . . . . . . 2834.2.3 Combiner plusieurs formes . . . . . . . . . . . . . . . . . . . . . . . 287

Chapitre 7La persistance des données

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

2. Fichiers de préférences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2892.1 Cibler le fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2902.2 Lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2912.3 Écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2922.4 Suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

3. Fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2953.1 Stockage interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

3.1.1 Écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2953.1.2 Lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.1.3 Supprimer un fichier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

3.2 Stockage externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2973.2.1 Disponibilité du support . . . . . . . . . . . . . . . . . . . . . . . . . 2983.2.2 Accès et emplacements . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.2.3 Fichiers communs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

3.3 Fichiers temporaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3013.3.1 Stockage interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3013.3.2 Stockage externe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Page 9: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

8Guide de développement d’applications Java

Android

4. Bases de données SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3034.1 Création d'une base de données. . . . . . . . . . . . . . . . . . . . . . . . . 3034.2 Traitements et requêtes SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . 305

4.2.1 Navigation dans les résultats . . . . . . . . . . . . . . . . . . . . . . 3064.2.2 Lecture de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

4.3 Mises à jour. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3084.4 Optimisation pour la recherche textuelle . . . . . . . . . . . . . . . . . 311

4.4.1 Création et peuplement de la table . . . . . . . . . . . . . . . . . 3114.4.2 Interrogation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

5. Fournisseur de contenus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3145.1 Interface et URI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3145.2 Requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3155.3 Ajout d'un enregistrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3185.4 Suppression d'enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . 318

6. Sauvegarde dans les nuages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3196.1 Souscrire à l'Android Backup Service. . . . . . . . . . . . . . . . . . . . . 3206.2 Configuration de la clé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3226.3 Agent de sauvegarde. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

6.3.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3246.3.2 BackupAgentHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

6.4 Gestionnaire de sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3276.4.1 Demander une sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . 3286.4.2 Tester le service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

7. Prise en charge du JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3297.1 Présentation du format JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 3297.2 Interprétation du format JSON. . . . . . . . . . . . . . . . . . . . . . . . . 331

Page 10: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

9Table des matières

Chapitre 8Intentions, récepteurs d’événements et services

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

2. Intention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3362.1 Intention explicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3362.2 Intention implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

2.2.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3372.2.2 Filtre d’intention. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

2.3 Intention en attente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

3. Récepteur d'événements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3443.1 Événement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3453.2 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3463.3 Cycle de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

4. Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3494.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3504.2 Utilisation directe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3514.3 Utilisation en établissant une connexion . . . . . . . . . . . . . . . . . 3524.4 Cycle de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

4.4.1 onCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3554.4.2 onStartCommand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3554.4.3 onBind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3564.4.4 onUnbind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3574.4.5 onDestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

4.5 IntentService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358

Page 11: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

10Guide de développement d’applications Java

Android

Chapitre 9Concurrence, sécurité et réseau

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

2. Processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3612.1 android:process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3622.2 Partage de processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

3. Programmation concurrente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3653.1 AsyncTask. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3663.2 Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

3.2.1 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3703.2.2 runOnUIThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3713.2.3 Communication interthreads . . . . . . . . . . . . . . . . . . . . . 372

4. Sécurité et droits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3754.1 Les droits avant Android MarshMallow . . . . . . . . . . . . . . . . . . 3764.2 Les droits sous Android MarshMallow . . . . . . . . . . . . . . . . . . . 3764.3 Déclaration de droits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3794.4 Restriction d'utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

5. Réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3815.1 Agent utilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3835.2 AndroidHttpClient. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3865.3 Utilisation de la bibliothèque Volley. . . . . . . . . . . . . . . . . . . . . 389

5.3.1 Intégration de Volley . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3895.3.2 Requêtes de type chaîne de caractères . . . . . . . . . . . . . . 3945.3.3 Ajouter des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . 3975.3.4 Requêtes au format JSON . . . . . . . . . . . . . . . . . . . . . . . . 3975.3.5 Requêtes au format Image . . . . . . . . . . . . . . . . . . . . . . . . 3995.3.6 Autres requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

Page 12: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

11Table des matières

Chapitre 10Réseaux sociaux

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

2. Intégration standard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4022.1 Sous Android 2.x et 3.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4022.2 Sous Android 4.x. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

3. Intégration complète . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4073.1 Récupérer les clés d'API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

3.1.1 Créer une application Facebook. . . . . . . . . . . . . . . . . . . . 4083.1.2 Autres réseaux sociaux . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

3.2 Installer le SDK SocialAuth-Android . . . . . . . . . . . . . . . . . . . . 4113.2.1 Intégration des bibliothèques dans le projet . . . . . . . . . . 4123.2.2 Utilisation de l'API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

Chapitre 11Tracer, déboguer et tester

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

2. Journal d'événements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4202.1 Consultation des événements . . . . . . . . . . . . . . . . . . . . . . . . . . 4212.2 Écriture des événements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

3. Débogage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4243.1 Débogage pas à pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4243.2 Android Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

3.2.1 Analyse du CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4263.2.2 Analyse de la mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . 4293.2.3 Vue Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

3.3 Android Device Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4313.3.1 Vue Devices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4333.3.2 Vue Emulator Control . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

Page 13: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

12Guide de développement d’applications Java

Android

3.3.3 Vue Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4363.3.4 Vue Heap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4373.3.5 Vue Allocation Tracker . . . . . . . . . . . . . . . . . . . . . . . . . . 4383.3.6 Vue File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

4. Tests unitaires et fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4394.1 Création d'un projet de tests . . . . . . . . . . . . . . . . . . . . . . . . . . . 4404.2 Création d'une classe de tests unitaires locaux. . . . . . . . . . . . . 4414.3 Création d’un test pour une activité . . . . . . . . . . . . . . . . . . . . . 443

5. Test du singe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Chapitre 12Publier une application

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

2. Préliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4512.1 Version de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451

2.1.1 android:versionCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4512.1.2 android:versionName. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4522.1.3 Surcharge par Gradle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

2.2 Filtres pour le marché. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4542.2.1 uses-feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4552.2.2 uses-configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

3. Signature de l'application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4563.1 Compilation en mode débogage . . . . . . . . . . . . . . . . . . . . . . . . 4573.2 Compilation en mode final . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

3.2.1 Protection du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4593.2.2 Signer l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4603.2.3 Installer l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462

4. Production de plusieurs versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

Page 14: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

13Table des matières

5. Publication de l'application sur le Play Store . . . . . . . . . . . . . . . . . . 4675.1 Inscription. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4685.2 Publication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

5.2.1 Fichier .apk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4795.2.2 Fiche Google Play Store . . . . . . . . . . . . . . . . . . . . . . . . . . 4795.2.3 Tarifs et disponibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4815.2.4 Coordonnées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4825.2.5 Accepter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482

5.3 Et après ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

Chapitre 13Capteurs et géolocalisation

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

2. Les capteurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4862.1 Détecter un capteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4862.2 Obtenir les valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

3. Localisation géographique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4933.1 Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4943.2 Gestionnaire de localisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4953.3 Récupérer les données de localisation . . . . . . . . . . . . . . . . . . . . 496

3.3.1 En cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4973.3.2 Une seule fois . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4973.3.3 Périodiquement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5013.3.4 Stopper les mises à jour . . . . . . . . . . . . . . . . . . . . . . . . . . 503

4. Cartographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5034.1 Mise en place. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5044.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5064.3 Suivre la géocalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5104.4 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

Page 15: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

14Guide de développement d’applications Java

Android

Chapitre 14La technologie NFC

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

2. Présentation de NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5152.1 Les scénarios d'utilisation du NFC . . . . . . . . . . . . . . . . . . . . . . 5162.2 Les tags NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516

3. Prise en charge du NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5183.1 Utiliser avec un émulateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5183.2 Détecter si l'appareil est compatible NFC. . . . . . . . . . . . . . . . . 519

3.2.1 Filtrer les appareils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5193.2.2 Tester à l'exécution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5203.2.3 Activation par l'utilisateur . . . . . . . . . . . . . . . . . . . . . . . . 520

4. Découverte d'un tag NFC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5214.1 Prise en charge d'un intent

ACTION_NDEF_DISCOVERED . . . . . . . . . . . . . . . . . . . . . . . 5224.2 Prise en charge d'un intent

ACTION_TECH_DISCOVERED . . . . . . . . . . . . . . . . . . . . . . . 5234.3 Prise en charge d'un intent ACTION_TAG_DISCOVERED. . 5254.4 Android Application Records. . . . . . . . . . . . . . . . . . . . . . . . . . . 5264.5 Foreground dispatch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526

5. Lire un tag NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5295.1 Déterminer le contenu d'un tag NDEF . . . . . . . . . . . . . . . . . . . 5295.2 Lire une URI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5305.3 Lire une chaîne de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . 5325.4 Lire un type MIME. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5335.5 Lire un tag de type TNF_WELL_KNOWN . . . . . . . . . . . . . . . . 533

6. Écrire un tag NFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5346.1 Définir un enregistrement NdefRecord avec l'API 9 . . . . . . . . 535

6.1.1 Construire un payload de type texte. . . . . . . . . . . . . . . . 5366.1.2 Construire un payload de type URI . . . . . . . . . . . . . . . . 537

6.2 Définir un enregistrement NdefRecord avec les API 14 et 16 . 538

Page 16: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

15Table des matières

Chapitre 15Objets connectés

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541

2. Détection et connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5422.1 Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5422.2 Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5432.3 Recherche d’appareil BLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544

2.3.1 Recherche sous Jelly Bean . . . . . . . . . . . . . . . . . . . . . . . . 5442.3.2 Recherche sous Lollipop . . . . . . . . . . . . . . . . . . . . . . . . . . 5462.3.3 Appliquer des filtres lors de la recherche. . . . . . . . . . . . . 547

2.4 Connexion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550

3. Échange de données/interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . 5533.1 Découvrir les services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5533.2 Lire une caractéristique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5563.3 Écrire une valeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558

Chapitre 16Fonctionnalités avancées

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561

2. App Widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5622.1 Création. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5632.2 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5632.3 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5642.4 Cycle de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567

2.4.1 onEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5672.4.2 onDisabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5672.4.3 onUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5682.4.4 onDeleted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568

2.5 RemoteViews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569

Page 17: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

16Guide de développement d’applications Java

Android

2.6 Activité de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5722.6.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5722.6.2 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573

3. Protéger les applications payantes. . . . . . . . . . . . . . . . . . . . . . . . . . . 5753.1 Installation de la LVL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576

3.1.1 Téléchargement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5763.1.2 Intégration de la LVL dans le code source. . . . . . . . . . . . 577

3.2 Utilisation de la LVL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5783.2.1 Politique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5783.2.2 Obfuscation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5793.2.3 Vérification de la licence . . . . . . . . . . . . . . . . . . . . . . . . . 580

3.3 Tester. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5823.3.1 Tester sur un appareil Android . . . . . . . . . . . . . . . . . . . . 5873.3.2 Tester sur un émulateur. . . . . . . . . . . . . . . . . . . . . . . . . . 587

4. Proposer des achats intégrés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5884.1 Préparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5884.2 Utilisation du paiement intégré . . . . . . . . . . . . . . . . . . . . . . . . 591

4.2.1 Initier la communication avec le Play Store . . . . . . . . . . 5914.2.2 Obtenir la liste des produits. . . . . . . . . . . . . . . . . . . . . . . 5924.2.3 Vérifier qu’un produit a été commandé . . . . . . . . . . . . . 5944.2.4 Commander un produit . . . . . . . . . . . . . . . . . . . . . . . . . . 595

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599

Page 18: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

Editions ENI

Développez une application AndroidProgrammation en Java sous Android Studio

(2e édition)

CollectionExpert IT

Table des matières

Page 19: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

1Table des matières

Avant-propos

Chapitre 1

Environnement de développement

1. Architecture d’Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.1 Présentation d’Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.3 Play Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2. Android Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.1 Installation sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2 Installation sous Max OS X. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.3 Installation sous Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3. Compléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Chapitre 2

Principes de base d’Android

1. Concepts de base d’une application Android . . . . . . . . . . . . . . . . . . . 311.1 Contexte d’exécution/Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . 311.2 Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321.3 Fichier AndroidManifest.xml. . . . . . . . . . . . . . . . . . . . . . . . . . . . 321.4 Les activités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2. Un premier projet : Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333. Préparer un terminal virtuel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444. Configurer un terminal physique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

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 EI2ASAND dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 20: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

2Programmation en Java sous Android Studio

Développez une application Android

5. Débogage, trace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.1 Messages Toast. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.2 Logcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.3 Autres outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Chapitre 3

Préparation du projet LocDVD

1. Gérer la fragmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611.1 Densité d’écran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611.2 Les ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621.3 Density-independent pixel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

2. Jongler avec plusieurs versions d’API . . . . . . . . . . . . . . . . . . . . . . . . . 663. Bibliothèques de support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674. Internationalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685. Généralisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696. Notion de saveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717. Préparation du projet LocDVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Chapitre 4

Consultation et saisie de données

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732. Les activités – cycle de vie d’un écran . . . . . . . . . . . . . . . . . . . . . . . . . 74

2.1 Création d’une nouvelle activité . . . . . . . . . . . . . . . . . . . . . . . . . 742.2 Cycle de vie d’une activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752.3 Initialisation de l’activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

3. Construction d’un écran de consultation des données . . . . . . . . . . . 783.1 Création de l’interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

3.1.1 Code source. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.1.2 Les propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.1.3 Propriétés spécifiques pour les composants

LinearLayout et TextView. . . . . . . . . . . . . . . . . . . . . . . . . 843.1.4 Définir un identifiant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

Page 21: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

3Table des matières

3.1.5 Construction de l’interface . . . . . . . . . . . . . . . . . . . . . . . . 863.2 Liaison du fichier de layout avec le code de l’activité. . . . . . . . . 883.3 Inscription dans le Manifest . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

4. Saisie des données, contrôles principaux. . . . . . . . . . . . . . . . . . . . . . . 964.1 Création du squelette de l’écran . . . . . . . . . . . . . . . . . . . . . . . . . 974.2 Gestion des boutons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

4.2.1 Réagir au clic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034.2.2 Ajouter un composant . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

4.3 Test de l’écran de saisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075. Mettre en forme un écran, gérer l’affichage adaptatif . . . . . . . . . . . 109

5.1 Faire défiler l’écran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.2 Contrôler la saisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125.3 Gérer la rotation de l’écran. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

5.3.1 Sauvegarder les données. . . . . . . . . . . . . . . . . . . . . . . . . . 1155.3.2 Restaurer les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

Chapitre 5

Persistance des données

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212. Création et modification d’une base de données . . . . . . . . . . . . . . . 121

2.1 Création de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . 1222.2 Modification de la base de données. . . . . . . . . . . . . . . . . . . . . . 126

3. Manipulation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273.1 Création de la classe DVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273.2 Requêtes de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303.3 Requête d’enregistrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333.4 Requête de suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363.5 Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

4. Sauvegarde des préférences utilisateurs . . . . . . . . . . . . . . . . . . . . . . 1375. Lire et écrire dans un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

5.1 Intégrer un fichier de données . . . . . . . . . . . . . . . . . . . . . . . . . . 1395.2 Lire les données et les enregistrer. . . . . . . . . . . . . . . . . . . . . . . . 1405.3 Mémoriser la lecture du fichier . . . . . . . . . . . . . . . . . . . . . . . . . 143

Page 22: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

4Programmation en Java sous Android Studio

Développez une application Android

Chapitre 6

Contrôles avancés

1. Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1451.1 Intégrer une liste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

1.1.1 Intégrer un composant ListView. . . . . . . . . . . . . . . . . . . 1461.1.2 Déclaration d’un layout pour les éléments de la liste . . 1481.1.3 Implémenter un adaptateur. . . . . . . . . . . . . . . . . . . . . . . 149

1.2 Relier le composant ListView à l’adaptateur . . . . . . . . . . . . . . 1531.3 Gérer le clic sur un élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591.4 Afficher le DVD sélectionné . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

2. GridView, liste déroulante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692.1 Composant GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692.2 Liste déroulante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

3. TimePicker/DatePicker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703.1 Ajout d’un champ date de visionnage. . . . . . . . . . . . . . . . . . . . 1713.2 Saisie de la date de visionnage . . . . . . . . . . . . . . . . . . . . . . . . . . 172

4. Créer son propre composant réutilisable . . . . . . . . . . . . . . . . . . . . . 1774.1 Surcharger un composant de la plateforme . . . . . . . . . . . . . . . 1774.2 Définir des attributs personnalisés . . . . . . . . . . . . . . . . . . . . . . 1784.3 Intégrer le composant dans un layout . . . . . . . . . . . . . . . . . . . 180

Chapitre 7

Les fragments

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1831.1 Fragment et activité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1831.2 Cycle de vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1841.3 Compatibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

2. Travailler avec les fragments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1862.1 Création du fragment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1862.2 Modification de l’activité hôte . . . . . . . . . . . . . . . . . . . . . . . . . 191

3. Mise en œuvre du modèle Master/Detail . . . . . . . . . . . . . . . . . . . . . 1963.1 Mise en place du layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1983.2 Modification de la vue détaillée. . . . . . . . . . . . . . . . . . . . . . . . . 202

Page 23: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

5Table des matières

3.3 Gestion des fragments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Chapitre 8

Navigation et boîtes de dialogue

1. Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2151.1 Définition du menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2151.2 Prise en compte par l’activité . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

2. Le navigation drawer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2232.1 Modification du layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2232.2 Prise en charge par l’activité. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2262.3 Manipuler le panneau de navigation . . . . . . . . . . . . . . . . . . . . . 231

3. Afficher une boîte de dialogue standard . . . . . . . . . . . . . . . . . . . . . . 2334. Créer des boîtes de dialogue personnalisées . . . . . . . . . . . . . . . . . . . 238

Chapitre 9

Tâches asynchrones et services

1. Exécuter des actions en tâche de fond. . . . . . . . . . . . . . . . . . . . . . . . 2432. Développer un service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2563. Communiquer avec un service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2594. Utiliser les récepteurs d’évènement. . . . . . . . . . . . . . . . . . . . . . . . . . 263

4.1 Définir un récepteur d’évènement. . . . . . . . . . . . . . . . . . . . . . . 2634.2 Intention et filtre d’intention . . . . . . . . . . . . . . . . . . . . . . . . . . 2644.3 Inscrire le récepteur d’évènement . . . . . . . . . . . . . . . . . . . . . . . 265

Chapitre 10

Réseau et Internet

1. Présentation de Volley . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2671.1 L’application LocDVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2681.2 Intégrer la bibliothèque Volley . . . . . . . . . . . . . . . . . . . . . . . . . 268

Page 24: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

6Programmation en Java sous Android Studio

Développez une application Android

2. Interroger un service web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2732.1 Préparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2732.2 Demander les permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

2.2.1 Avant Marshmallow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2772.2.2 À partir de Marshmallow. . . . . . . . . . . . . . . . . . . . . . . . . 278

2.3 Interrogation du service web . . . . . . . . . . . . . . . . . . . . . . . . . . . 2783. Travailler avec le format JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

3.1 Interprétation du format JSON. . . . . . . . . . . . . . . . . . . . . . . . . 2863.2 Création de la liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2883.3 Vue détaillée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2973.4 Optimisations possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

4. Intégrer un navigateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

Chapitre 11

Exploiter le téléphone

1. Envoyer/recevoir des SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3171.1 Envoyer un SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

1.1.1 Gestion des permissions. . . . . . . . . . . . . . . . . . . . . . . . . . 3191.1.2 Envoyer un SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

1.2 Recevoir un SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3272. Utiliser les capteurs de l’appareil . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3323. Géolocaliser l’utilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

3.1 LocationManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3373.2 Location. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

Chapitre 12

Sortir de l’application

1. Développer un widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3432. Investir la barre de notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3563. Partager, utiliser les réseaux sociaux . . . . . . . . . . . . . . . . . . . . . . . . . 361

Page 25: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

7Table des matières

Chapitre 13

Design avancé

1. Mettre en place un thème, utiliser les styles . . . . . . . . . . . . . . . . . . 3672. Créer des images redimensionnables . . . . . . . . . . . . . . . . . . . . . . . . . 3733. Dessiner en XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3774. Animer les transitions d’écrans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

Chapitre 14

Images, son et vidéo

1. Prendre une photo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3871.1 Préparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3871.2 Implémenter la prise de vue. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3961.3 Sauvegarder le résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

2. Jouer un son . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4062.1 Lire un fichier son local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4062.2 Lire un flux sonore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

3. Jouer une vidéo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

Chapitre 15

Utilisation du Bluetooth Low Energy

1. Présentation du Bluetooth Low Energy . . . . . . . . . . . . . . . . . . . . . . 4152. Détecter un périphérique BLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

2.1 Préparation du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4162.2 Gestion des permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4182.3 Initialisation de BluetoothManager . . . . . . . . . . . . . . . . . . . . . 4212.4 Recherche d’objets Bluetooth Low Energy . . . . . . . . . . . . . . . . 423

2.4.1 Lancer le scan avant Android 21 (Lollipop) . . . . . . . . . . 4232.4.2 Lancer le scan à partir d’Android 21 . . . . . . . . . . . . . . . . 424

2.5 Arrêter l’analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4252.6 Exploiter le résultat du scan. . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

3. Connecter un objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4334. Lire une caractéristique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437

Page 26: Android - Editions ENI · Editions ENI Android Guide de développement d’applications Java pour Smartphones et Tablettes (4e édition) Collection Expert IT Table des matières

8Programmation en Java sous Android Studio

Développez une application Android

5. Écrire une caractéristique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

Chapitre 16

Android 8 Oreo

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4532. Intégrer une nouvelle version d’Android. . . . . . . . . . . . . . . . . . . . . . 4533. Migrer l’application LocDVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

3.1 Détecter les modifications à apporter . . . . . . . . . . . . . . . . . . . . 4573.2 Les notifications sous Android 8 . . . . . . . . . . . . . . . . . . . . . . . . 460

4. Quelques nouveautés d’Android 8 . . . . . . . . . . . . . . . . . . . . . . . . . . 4684.1 Les fonts en XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4684.2 L’autocomplétion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4704.3 Autres modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471

Chapitre 17

Publier une application

1. Ouvrir un compte développeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4732. Préparer la fiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4773. Publier un APK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4804. Produire plusieurs versions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4845. ... Et ensuite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4886. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491