Android FR PDF
Android FR PDF
#android
Table des matières
À propos 1
Remarques 2
Versions 2
Examples 3
Configuration de base 5
Inspection du projet 10
Exécution de l'application 14
Exigences et hypothèses 16
Coder l'application 17
Construire le code 18
Installation et exécution 19
Désinstallation de l'application 21
Voir également 21
Principes de base de l'application 21
Composants de l'application 21
Le contexte 22
Examples 29
Chapitre 3: ACRA 30
Syntaxe 30
Paramètres 30
Remarques 30
Examples 30
ACRAHandler 30
Exemple manifeste 31
Installation 31
Chapitre 4: Activité 32
Introduction 32
Syntaxe 32
Paramètres 33
Remarques 33
Examples 33
La norme: 38
SingleTop: 38
SingleTask: 38
Seule instance: 38
Introduction 43
Remarques 43
Examples 43
Exemple de sortie 43
Appareil enraciné 48
Lorsque vous avez un périphérique rooté mais que vous n'avez pas accès à un câble USB 48
Redémarrer le périphérique 49
Voir logcat 51
Prendre une capture d'écran et une vidéo (pour kitkat uniquement) à partir d'un écran de p 53
Vidéo 54
Sauvegarde 56
Énumérer toutes les autorisations qui nécessitent une subvention d'exécution des utilisate 57
Afficher les données internes d'une application (données / données / ) sur un appareil 58
Chapitre 6: AdMob 60
Syntaxe 60
Paramètres 60
Remarques 60
Examples 60
Exécution 60
Manifeste 60
XML 61
Java 61
Chapitre 7: Affichage 63
Introduction 63
Syntaxe 63
Remarques 63
Examples 63
Personnalisation de TextView 63
TextView Spannable 66
Texte barré 68
Examples 76
Chapitre 9: AIDL 79
Introduction 79
Examples 79
Service AIDL 79
Introduction 81
Examples 81
Examples 90
Introduction 93
Examples 93
Chapitre 13: Amélioration des performances Android à l'aide des polices Icon 94
Remarques 94
Examples 94
Examples 99
Comment appeler des fonctions dans une bibliothèque native via l'interface JNI 99
Examples 103
Introduction 105
Examples 105
Examples 112
ValueAnimator 114
ObjectAnimator 115
ViewPropertyAnimator 116
Remarques 118
Examples 118
Examples 120
Remarques 126
Examples 126
Autorisations 126
Remarques 135
Examples 135
Comment utiliser Android Fingerprint API pour enregistrer les mots de passe des utilisateu 137
Remarques 146
Examples 146
Obtenir des modifications dans l'activité de l'utilisateur avec l'API de clôture 148
Obtenir des modifications pour l'emplacement dans une certaine plage à l'aide de l'API de 149
Introduction 152
Remarques 152
Examples 152
Examples 166
Examples 168
Introduction 171
Remarques 171
Examples 172
Remarques: 176
ILoginPresenter.class 180
LoginPresenterCompl.class 180
UserModel.class 181
IUser.class 181
MVP 182
Paramètres 184
Examples 184
Exemple 184
Usage: 185
Remarque 185
Remarque 187
Passer l'activité en tant que WeakReference pour éviter les fuites de mémoire 191
THREAD_POOL_EXECUTOR 193
SERIAL_EXECUTOR 193
Examples 196
Examples 197
Remarques 200
Examples 200
AutoCompleteTextView simple et codé en dur 200
strings.xml 201
MainActivity.java 201
Introduction 205
Remarques 205
Examples 206
Inclure tout le code lié aux permissions dans une classe de base abstraite et étendre l'ac 211
Introduction 214
Examples 214
Granularité 214
Remarques 216
Examples 216
Configuration de la vérification des peluches dans les fichiers source Java et XML 218
Configuration de la vérification des peluches en Java 219
Remarques 221
Examples 221
Indéterminé 228
Déterminé 228
Tampon 229
Chapitre 35: Bibliothèque Dagger 2: injection de dépendance dans les applications 232
Introduction 232
Remarques 232
Examples 233
Remarques 235
Examples 235
Introduction 248
Examples 248
Introduction 254
Examples 254
Introduction 257
Remarques 257
Liens: 257
Examples 257
Syntaxe 261
Examples 261
Utiliser le même événement de clic pour une ou plusieurs vues dans le XML 262
Introduction 269
Examples 269
Introduction 277
Syntaxe 277
Paramètres 277
Examples 277
Paramètres 279
Remarques 279
Examples 280
Examples 290
AndroidManifest.xml 290
Décoder le bitmap correctement pivoté à partir de l'URI récupéré avec l'intention 298
Introduction 302
Syntaxe 302
Paramètres 302
Examples 302
Examples 309
Introduction 312
Paramètres 312
Remarques 313
Examples 313
Utilisation d'images en tant qu'arrière-plan dans CardView (problèmes liés aux périphériqu 316
Examples 319
Examples 322
Remarques 323
Examples 323
Problème: 327
Solution: 327
Exemple: 327
Remarque: 328
Introduction 330
Syntaxe 330
Examples 330
Chargez l'image à partir d'une ressource à partir d'un périphérique Android. Utiliser les 330
Introduction 333
Paramètres 333
Remarques 333
Examples 334
Rechargement 336
Remarques 338
Examples 338
Introduction 340
Examples 340
Cryptage AES des données en utilisant un mot de passe de manière sécurisée 340
Examples 342
Masquer le clavier lorsque l'utilisateur touche n'importe où ailleurs sur l'écran 344
Introduction 346
Remarques 346
Examples 346
Remarques 347
Examples 347
Chapitre 59: Comment stocker les mots de passe de manière sécurisée 349
Examples 349
Introduction 353
Remarques 353
Examples 354
Introduction 356
Examples 356
Examples 363
Paramètres 366
Remarques 366
Examples 366
Examples 369
Introduction 372
Remarques 372
Examples 372
RippleDrawable 380
Examples 394
Approche étape par étape pour configurer Jenkins pour Android 394
PARTIE I: Configuration initiale sur votre machine 394
PARTIE II: Configurer Jenkins pour construire des jobs Android 395
Partie III: Créer un Job Jenkins pour votre projet Android 396
Examples 398
Introduction 402
Syntaxe 402
Paramètres 402
Remarques 403
Examples 403
Chaînes 404
Introduction 406
Examples 406
Examples 407
Examples 410
Exemple: 410
Introduction 411
Remarques 411
Examples 411
Examples 415
Introduction 416
Remarques 416
Examples 416
Examples 425
Chapitre 76: Création de vos propres bibliothèques pour les applications Android 427
Examples 427
Examples 430
build.gradle 439
Examples 444
Remarques 446
Examples 446
Chapitre 80: Créer une classe Singleton pour le message Toast 451
Introduction 451
Syntaxe 451
Paramètres 451
Remarques 452
Examples 452
Créer sa propre classe de singleton pour les massages de pain grillé 452
Examples 454
Examples 458
Syntaxe 459
Remarques 459
Examples 459
Remarques 466
Examples 466
Examples 468
Syntaxe 469
Paramètres 469
Remarques 469
Examples 470
Chapitre 87: Définir la valeur de pas (incrément) pour RangeSeekBar personnalisé 476
Introduction 476
Remarques 476
Examples 477
Introduction 478
Examples 478
Compiler et relier les shaders GLSL-ES à partir d'un fichier de ressources 479
Examples 481
NetworkOnMainThreadException 481
ActivityNotFoundException 482
OutOfMemoryError 482
DexException 483
Introduction 486
Syntaxe 486
Paramètres 487
Remarques 487
Examples 487
Récupérer toutes les entrées stockées d'un fichier SharedPreferences particulier 491
Stocker, récupérer, supprimer et effacer les données des préférences partagées 498
Examples 502
Introduction 508
Paramètres 508
Remarques 508
Examples 509
Examples 513
Installation 514
Remarques 515
Examples 515
Introduction 518
Remarques 518
Examples 518
Paramètres 525
Remarques 525
Examples 525
DatePickerDialog 528
Examples 536
Introduction 539
Remarques 539
Examples 539
Remarques 548
Examples 550
Examples 552
Remarques 554
Orientation 554
Unités 555
px 555
dans 555
mm 555
pt 555
dp ou tremper 555
sp 555
Examples 556
Introduction 559
Syntaxe 559
Remarques 559
Paramètres 559
Examples 560
IdlingResource 562
REMARQUES 563
Exemple 563
Usage 564
Examples 566
Icône ou bouton dans Custom Edit Text et son action et cliquez sur auditers. 571
Introduction 574
Remarques 574
LocationManager 574
FusedLocationProviderApi 575
Dépannage 577
Examples 584
Demande de mises à jour d'emplacement sur un thread distinct à l'aide de LocationManager 590
Remarques 597
Examples 597
Chapitre 106: Événements / Intentions du bouton matériel (PTT, LWP, etc.) 603
Introduction 603
Examples 603
PTT_KEY 603
YELLOW_KEY 603
SOS_KEY 603
GREEN_KEY 603
Remarques 605
Examples 605
Modifications de code non prises en charge lors de l'utilisation d'Instant Run 608
Examples 610
Principales étapes pour lire de la vidéo et de l'audio à l'aide des implémentations TrackR 611
Paramètres 612
Examples 612
Examples 618
Étape 1: 618
Étape 2: 618
Étape 3: 618
Étape 4: 619
Étape 5: 619
Étape 6: 622
Introduction 625
Syntaxe 625
Examples 625
Introduction 628
Remarques 628
Examples 628
Examples 639
Examples 641
Introduction 643
Remarques 643
Examples 643
Examples 647
Spécifiez les répertoires dans lesquels les fichiers que vous souhaitez partager sont plac 647
Examples 649
Introduction 652
Remarques 652
Examples 652
Introduction 680
Examples 680
Configurer une application client Firebase Cloud Messaging sur Android 680
Ce code que j'ai implanté dans mon application pour repousser l'image, le message et aussi 681
Remarques 685
Examples 685
Concevoir et comprendre comment récupérer des données en temps réel à partir de la base de 686
Exemple 689
Introduction 697
Paramètres 697
Remarques 697
Examples 698
Introduction 705
Examples 705
Patterns + 1 (786) 1234 5678 705
Remarques 706
Examples 706
Introduction 711
Syntaxe 711
Remarques 712
Constructeur 712
Examples 712
Navigation entre des fragments à l'aide d'un backstack et d'un motif de tissu statique 714
Exemple 715
Envoyer un rappel à une activité lorsque le bouton du fragment est cliqué 715
Introduction 723
Remarques 723
Examples 723
Introduction 726
Remarques 726
Examples 726
Examples 727
Évitez les fuites de mémoire avec la classe anonyme, le gestionnaire, la tâche de minuteri 738
Introduction 739
Examples 739
Introduction 741
Paramètres 741
Examples 741
Boutons 741
Surface 742
Examples 745
Introduction 746
Remarques 746
Examples 746
ImageView 747
Transformation du cercle de glissement (Charger l'image dans une image circulaire) 748
Syntaxe 754
Examples 754
Paramètres 756
Remarques 756
Examples 756
MapView: incorporation d'un GoogleMap dans une mise en page existante 768
Ne lancez pas Google Maps lorsque la carte est cliquée (mode lite) 777
UISettings 777
Examples 782
Ouvrez Google Play Store avec la liste de toutes les applications de votre compte d'éditeu 782
Introduction 784
Syntaxe 784
Remarques 784
Examples 785
Plugins 786
signatureConfig 788
BuildConfigField 790
ResValue 791
Pourquoi y a-t-il deux fichiers build.gradle dans un projet Android Studio? 795
Spécification de différents ID d'application pour les types de construction et les variant 797
Désactiver la compression d'image pour une taille de fichier APK plus petite 802
Introduction 811
Examples 811
Méthodes d'aide pour les requêtes SELECT, INSERT, DELETE, UPDATE 811
Création d'une entité avec GreenDAO 3.X qui possède une clé primaire composite 813
Démarrer avec GreenDao v3.X 814
Syntaxe 817
Paramètres 817
Examples 817
Introduction 821
Syntaxe 821
Examples 822
Syntaxe 834
Remarques 834
Examples 834
Une classe HttpURLConnection polyvalente pour gérer tous les types de requêtes HTTP 841
Usage 844
Remarques 845
Examples 845
Introduction 848
Syntaxe 848
Paramètres 848
Examples 848
MLRoundedImageView.java 857
Remarques 859
Examples 861
Examples 865
Introduction 866
Examples 866
Intégration de Google Auth dans votre projet. (Obtenir un fichier de configuration) 866
Remarques 868
Examples 868
Syntaxe 870
Paramètres 870
Examples 870
Remarques 873
Examples 873
Instructions 873
Introduction 882
Syntaxe 882
Paramètres 883
Remarques 883
Examples 884
Commencer une activité 884
OriginActivity 885
DestinationActivity 885
DetailActivity: 888
Parcelable 900
Sérialisable 902
Syntaxe 905
Paramètres 905
Remarques 905
Examples 905
Syntaxe 907
Remarques 907
Examples 907
Examples 910
Introduction 914
Remarques 914
Examples 914
Planification de la localisation: ajout du support RTL dans les mises en page 915
Introduction 919
Examples 919
Introduction 921
Examples 921
Examples 924
Commencer 924
Syntaxe 925
Paramètres 925
Remarques 925
Définition 925
Examples 926
Enregistrement 928
Performance: 930
Sécurité: 930
Conclusion: 931
Journal avec un lien vers la source directement depuis Logcat 931
Syntaxe 937
Remarques 937
Examples 937
Travailler avec une chaîne vide lors de l'analyse syntaxique de json 940
Introduction 946
Syntaxe 946
Remarques 946
Examples 946
Introduction 948
Examples 948
Syntaxe 950
Remarques 950
Examples 952
Examples 959
Voici à quoi il ressemble sur Android Marshmallow avec la notification Heads Up: 960
Mais vous souhaitez que votre texte soit entièrement montré: 966
Remarques 969
Examples 969
Examples 973
Devise 973
Types de configuration et noms de qualificateur pour chaque dossier sous le répertoire "re 975
Liste exhaustive de tous les différents types de configuration et de leurs valeurs de qual 975
Introduction 983
Examples 983
Remarques 984
Examples 984
Introduction 986
Paramètres 986
Remarques 986
Le <intent-filter> 986
Ressources 987
Examples 987
Remarques 991
Examples 991
Utiliser un gestionnaire pour exécuter du code après un laps de temps retardé 991
Création d'un gestionnaire pour le thread principal (thread d'interface utilisateur) 991
Créer un gestionnaire pour un autre HandlerThread et lui envoyer des événements 992
Syntaxe 995
Remarques 995
Examples 995
Examples 998
Récupérer des fichiers audio / MP3 à partir d'un dossier spécifique de l'appareil ou récup 998
Syntaxe 1002
Paramètres 1002
Remarques 1002
Examples 1002
Étape 1: 1003
Étape 2: 1004
Emballer! 1004
Examples 1007
Introduction 1009
Syntaxe 1009
Remarques 1009
Examples 1011
LinearLayout 1011
FrameLayout 1020
Coordinateur 1021
LayoutParams 1027
Remarques 1031
Examples 1032
Introduction 1034
Examples 1034
Introduction 1036
Remarques 1036
Examples 1036
Chapitre 176: Moyen rapide pour configurer Retrolambda sur un projet Android. 1038
Introduction 1038
Examples 1038
Introduction 1040
Remarques 1040
Le problème: 1040
Examples 1041
Multidex en utilisant MultiDexApplication directement 1041
Méthode de comptage Références sur chaque version (Dexcount Gradle Plugin) 1043
Remarques 1046
Examples 1047
Remarques 1055
Examples 1055
Examples 1064
Chapitre 181: Obtenir les noms de police du système et utiliser les polices 1067
Introduction 1067
Examples 1067
Examples 1072
Introduction 1074
Examples 1074
Examples 1075
I / O Schedulers 1077
Examples 1079
Remarques 1084
Examples 1084
Passer un événement 1084
Remarques 1086
Examples 1086
Remarques 1088
Examples 1088
Introduction 1097
Examples 1097
MainActivity.java 1097
Introduction 1102
Syntaxe 1102
Paramètres 1102
Remarques 1102
Examples 1103
Introduction 1107
Remarques 1107
Examples 1107
Introduction 1111
Examples 1111
Introduction 1114
Remarques 1114
Examples 1114
Gradle. 1114
Maven: 1114
Introduction 1122
Examples 1122
Examples 1123
Remarques 1124
Examples 1124
Examples 1127
Appliquer la police sur TextView par xml (code Java non requis) 1127
Chapitre 199: Port Mapping en utilisant la bibliothèque Cling dans Android 1132
Examples 1132
Introduction 1134
Examples 1134
Introduction 1137
Remarques 1137
Examples 1137
Examples 1143
Supprimer les instructions de journalisation de trace (et autres) au moment de la générati 1145
Examples 1149
Chapitre 204: Publier un fichier .aar sur Apache Archiva avec Gradle 1151
Examples 1151
Chapitre 205: Publier une bibliothèque dans les référentiels Maven 1153
Examples 1153
Chapitre 206: Qu'est-ce que ProGuard? Qu'est-ce que l'utilisation dans Android? 1155
Introduction 1155
Examples 1155
Réduisez votre code et vos ressources avec proguard 1155
Examples 1157
Examples 1159
Introduction 1165
Examples 1165
Introduction 1170
Paramètres 1170
Remarques 1170
Examples 1172
Afficher la vue par défaut jusqu'à ce que les éléments se chargent ou quand les données ne 1188
Examples 1193
Terminé! 1201
StaggeredGridLayoutManager 1201
Examples 1204
Introduction 1215
Examples 1215
Commencer 1215
Graines 1218
Conclusion 1223
BlurBitmapTask.java 1226
Usage: 1227
Examples 1228
Introduction 1246
Remarques 1246
Examples 1246
Examples 1264
Mise à niveau avec RxJava pour récupérer les données de manière asynchrone 1265
Examples 1269
Introduction 1273
Examples 1273
Configuration 1273
Introduction 1275
Syntaxe 1275
Paramètres 1275
Remarques 1275
Examples 1275
Introduction 1277
Syntaxe 1277
Paramètres 1277
Remarques 1277
Examples 1277
Examples 1279
Examples 1280
Introduction 1283
Syntaxe 1283
Paramètres 1283
Examples 1283
Envoyer du texte, des touches enfoncées et des événements tactiles au périphérique Android 1283
Introduction 1291
Examples 1291
Syntaxe 1294
Paramètres 1294
Remarques 1294
Examples 1294
Examples 1299
Syntaxe 1302
Examples 1302
Introduction 1307
Remarques 1307
Examples 1307
Créer un contrat, une aide et un fournisseur pour SQLite dans Android 1311
Syntaxe 1324
Paramètres 1324
Examples 1324
Chapitre 230: Stratégie de mode strict: outil permettant de détecter le bogue lors de la c 1335
Introduction 1335
Remarques 1335
Examples 1335
Le code ci-dessous sert à configurer le StrictMode for Thread Policies. Ce code doit être 1335
Le code ci-dessous traite des fuites de mémoire, comme il détecte lorsque dans SQLLite la 1335
Examples 1336
Introduction 1348
Examples 1348
Examples 1358
Examples 1364
GetCurrentRealTime 1366
Introduction 1368
Remarques 1368
Examples 1368
Syntaxe 1370
Remarques 1370
Examples 1370
Remarques 1373
Expresso 1373
Dépannage 1373
Examples 1373
La navigation 1380
Grouper une collection de classes de test dans une suite de tests 1385
Remarques 1387
Examples 1387
Panne 1387
Astuce Créez rapidement des classes de test dans Android Studio 1388
Installer 1391
Examples 1397
Introduction 1402
Remarques 1402
Examples 1402
TextInputEditText 1404
Examples 1406
Examples 1408
Examples 1414
Personnalisable 1416
Examples 1419
Comment varier entre les événements tactiles des groupes de vues enfants et parents 1419
Examples 1423
Étape 3: Accédez à la transition XML pouvant être dessinée dans la méthode onCreate () de 1423
Animer la couleur d'arrière-plan des vues (couleur de commutation) avec TransitionDrawable 1424
Introduction 1425
Syntaxe 1425
Examples 1425
Introduction 1428
Remarques 1428
Examples 1428
Examples 1436
Examples 1437
Examples 1438
En utilisant 1438
Examples 1445
Utiliser les intentions du réseau pour effectuer des tâches tant que les données sont auto 1445
Introduction 1447
Syntaxe 1447
Paramètres 1447
Remarques 1447
Examples 1447
Remarques 1452
Examples 1453
Introduction 1455
Paramètres 1455
Remarques 1455
Examples 1456
Examples 1457
Examples 1459
Introduction 1461
Examples 1461
Introduction 1473
Examples 1473
Introduction 1475
Remarques 1475
Examples 1475
selected_dot.xml 1482
default_dot.xml 1483
tab_selector.xml 1483
Remarques 1485
Examples 1485
Fastfile pour créer et télécharger plusieurs versions de Beta par Crashlytics 1485
Ligne Fastfile pour créer et installer toutes les versions d'un type de construction donné 1488
Remarques 1489
Examples 1489
Introduction 1491
Syntaxe 1491
Remarques 1491
Installation 1491
Examples 1492
Ajouter des en-têtes personnalisés à vos requêtes [par exemple pour l'authentification de 1494
Réponse booléenne variable du serveur avec demande json dans volley 1500
Introduction 1503
Remarques 1503
Examples 1503
Dialogues d'alerte JavaScript dans WebView - Comment les faire fonctionner 1503
Dépannage de WebView en imprimant des messages de console ou par le débogage à distance 1506
Remarques 1508
Examples 1508
Métadonnées 1508
Droit sur votre application ==> Nouveau ==> Widget ==> Widget App 1510
Examples 1512
Examples 1521
Remarques 1524
Examples 1524
Crédits 1534
À propos
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: android
It is an unofficial and free Android ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official Android.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/fr/home 1
Chapitre 1: Démarrer avec Android
Remarques
Si vous souhaitez en savoir plus sur le paramètre Android Gradle Plugin, consultez la
documentation android-gradle .
Si vous êtes intéressé par les émulateurs alternatifs, vous pouvez regarder Genymotion . Il fournit
un plan gratuit et nécessite moins de RAM.
Versions
https://riptutorial.com/fr/home 2
Version Niveau API Code de version Date de sortie
Examples
Configurer Android Studio
Android Studio est l'IDE de développement Android officiellement pris en charge et recommandé
par Google. Android Studio est fourni avec Android SDK Manager , un outil permettant de
télécharger les composants du Android SDK requis pour commencer à développer des applications.
Si vous avez besoin de travailler sur d'anciens projets construits à l'aide d'anciennes
versions de SDK, vous devrez peut-être également télécharger ces versions
Depuis Android Studio 2.2, une copie de la dernière OpenJDK est fournie avec l’installation et est
le JDK (Java Development Kit) recommandé pour tous les projets Android Studio. Cela supprime
la nécessité d'installer le package JDK d'Oracle. Pour utiliser le SDK fourni, procédez comme suit:
1. Ouvrez votre projet dans Android Studio et sélectionnez Fichier> Structure du projet dans
la barre de menus.
2. Dans la page Emplacement du SDK et sous JDK , cochez la case Utiliser le JDK intégré .
3. Cliquez sur OK .
https://riptutorial.com/fr/home 3
Android Studio permet d'accéder à deux fichiers de configuration via le menu Aide :
Si vous souhaitez créer un projet à partir du shell, vérifiez que vous disposez d'un fichier
local.properties créé automatiquement par Android Studio. Si vous devez créer le projet sans
Android Studio, vous avez besoin d'une ligne commençant par sdk.dir= suivi du chemin d'accès à
votre installation SDK.
Ouvrez un shell et accédez au répertoire du projet. Entrez ./gradlew aR et appuyez sur Entrée. aR
est un raccourci pour assembleRelease , qui télécharge toutes les dépendances pour vous et
construit l'application. Le fichier APK final sera dans ProjectName/ModuleName/build/outputs/apk et
s'appellera ModuleName-release.apk .
Remarque: ce guide est basé sur Android Studio 2.2, mais le processus sur les autres
versions est essentiellement le même.
https://riptutorial.com/fr/home 4
Configuration de base
Vous pouvez démarrer un nouveau projet de deux manières:
• Cliquez sur Start a New Android Studio Project partir de l'écran d'accueil.
• Accédez à File → New Project si un projet est déjà ouvert.
Exemple: Hello World . Vous pouvez toujours le modifier ultérieurement dans le fichier
AndroidManifest.xml .
Exemple: stackoverflow.com .
3. Nom du package (aka applicationId ) - Ceci est le nom du package de projet complet.
Il doit suivre la notation inversée des noms de domaine ( DNS inversé ): domaine de premier
niveau . Compagnie Domaine. [ Segment de la société . ] Nom de l'application .
N'utilisez pas le préfixe par défaut "com.example" sauf si vous n'avez pas l'intention de
soumettre votre application au Google Play Store. Le nom du package sera votre
application unique dans Google Play.
4. Emplacement du projet - C'est le répertoire dans lequel votre projet sera stocké.
https://riptutorial.com/fr/home 5
https://riptutorial.com/fr/home 6
Graphique des distributions de versions Android actuelles, affichées lorsque vous cliquez sur
Aidez-moi à choisir.
Maintenant, choisissez les plates-formes et la version du SDK Android que l'application prendra
en charge.
https://riptutorial.com/fr/home 7
https://riptutorial.com/fr/home 8
Google Play Store pour déterminer les périphériques sur lesquels une application peut être
installée. Par exemple, l'application Stack Exchange prend en charge Android 4.1+.
Android Studio vous indiquera (approximativement) quel pourcentage d'appareils sera pris en
charge, compte tenu du SDK minimum spécifié.
Lorsque vous décidez du kit SDK minimum , vous devez tenir compte des statistiques de
Dashboards , qui vous donneront des informations sur la version des appareils ayant visité le
Google Play Store au cours de la dernière semaine.
https://riptutorial.com/fr/home 9
Ici, si vous le souhaitez, vous pouvez changer le nom de l'activité et de la mise en page. Une
bonne pratique consiste à conserver l' Activity comme suffixe pour le nom de l'activité et
activity_ comme préfixe pour le nom de la mise en page. Si nous les laissons par défaut, Android
Studio générera pour nous une activité appelée MainActivity et un fichier de mise en page appelé
activity_main . Maintenant, cliquez sur Finish .
Android Studio créera et configurera notre projet, ce qui peut prendre un certain temps en fonction
du système.
Inspection du projet
Pour comprendre comment fonctionne Android, jetons un coup d’œil à certains fichiers créés pour
nous.
Sur le volet gauche d'Android Studio, nous pouvons voir la structure de notre application Android .
Si une application a besoin d'accéder à une fonctionnalité protégée par une autorisation, elle doit
déclarer qu'elle requiert cette autorisation avec un élément <uses-permission> dans le manifeste.
https://riptutorial.com/fr/home 10
Ensuite, lorsque l'application est installée sur le périphérique, le programme d'installation
détermine s'il convient ou non d'accorder l'autorisation demandée en vérifiant les autorités ayant
signé les certificats de l'application et, dans certains cas, en demandant à l'utilisateur. Une
application peut également protéger ses propres composants (activités, services, récepteurs de
diffusion et fournisseurs de contenu) avec des autorisations. Il peut utiliser l'une des autorisations
définies par Android (répertoriées dans android.Manifest.permission) ou déclarées par d'autres
applications. Ou il peut définir les siens.
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Vous pouvez également basculer vers le concepteur de mise en page XML en cliquant sur "Texte"
en bas de Android Studio, comme illustré ici:
https://riptutorial.com/fr/home 11
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.stackexchange.docs.helloworld.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
Vous verrez un widget appelé TextView dans cette présentation, avec la propriété android:text
définie sur "Hello World!". Ceci est un bloc de texte qui sera affiché à l'utilisateur lors de
l'exécution de l'application.
Vous pouvez en savoir plus sur les mises en page et les attributs .
Ensuite, regardons MainActivity . C'est le code Java qui a été généré pour MainActivity .
https://riptutorial.com/fr/home 12
// In our case we are using the activity_main layout
setContentView(R.layout.activity_main);
}
}
Comme défini dans notre manifeste Android, MainActivity sera lancé par défaut lorsqu'un
utilisateur lance l'application HelloWorld .
android {
signingConfigs {
applicationName {
keyAlias 'applicationName'
keyPassword 'password'
storeFile file('../key/applicationName.jks')
storePassword 'anotherPassword'
}
}
compileSdkVersion 26
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.stackexchange.docs.helloworld"
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0"
signingConfig signingConfigs.applicationName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:26.0.0'
}
Ce fichier contient des informations sur la version et la version de votre application. Vous pouvez
également l'utiliser pour ajouter des dépendances à des bibliothèques externes. Pour l'instant,
n'apportons aucune modification.
Il est conseillé de toujours sélectionner la dernière version disponible pour les dépendances:
• buildToolsVersion : 26.0.0
• com.android.support:appcompat-v7 : 26.0.0 (juillet 2017)
https://riptutorial.com/fr/home 13
• base de feu : 11.0.4 (août 2017)
compileSdkVersion
compileSdkVersion est votre façon de dire à Gradle quelle version du SDK Android compiler votre
application. L'utilisation du nouveau SDK Android est une exigence pour utiliser l'une des
nouvelles API ajoutées à ce niveau.
Par conséquent, il est fortement recommandé de toujours compiler avec le dernier SDK. Vous
obtiendrez tous les avantages des nouvelles vérifications de compilation sur le code existant,
éviterez les API récemment obsolètes et serez prêt à utiliser de nouvelles API.
minSdkVersion
Si compileSdkVersion définit les dernières API disponibles, minSdkVersion est la limite inférieure de
votre application. minSdkVersion est l'un des signaux utilisés par Google Play Store pour déterminer
sur quel périphérique d'un utilisateur une application peut être installée.
Il joue également un rôle important pendant le développement: par défaut, les linteaux contre
votre projet vous avertissent lorsque vous utilisez des API au-dessus de votre minSdkVersion , vous
aidant ainsi à éviter le problème d'exécution d'une API inexistante. La vérification de la version du
système à l'exécution est une technique courante lors de l'utilisation des API uniquement sur les
versions de plate-forme plus récentes.
targetSdkVersion
targetSDKVersion est la version d'Android qui constitue la limite supérieure des outils disponibles.
Si targetSDKVersion est inférieur à 23, l'application n'a pas besoin de demander des autorisations
à l'exécution pour une instance, même si l'application est exécutée sur API 23+.
TargetSDKVersion n'empêche pas les versions Android au-dessus de la version Android
sélectionnée d'exécuter l'application.
• Un exemple de base
• Introduction au plugin Gradle pour Android et au wrapper
• Introduction à la configuration des méthodes build.gradle et DSL
https://riptutorial.com/fr/home 14
Exécution de l'application
Maintenant, exécutons notre application HelloWorld. Vous pouvez soit exécuter un appareil virtuel
Android (que vous pouvez configurer en utilisant le Gestionnaire AVD dans Android Studio,
comme décrit dans l'exemple ci-dessous) ou connecter votre propre appareil Android via un câble
USB.
Si les Developer Options ne sont pas visibles dans les paramètres, accédez à About Phone et
appuyez sur le Build Number sept fois. Cela permettra aux Developer Options de s'afficher dans vos
paramètres.
Vous devrez peut-être également modifier la configuration de build.gradle pour build.gradle une
version de votre périphérique.
Sur les appareils fonctionnant sous Android 4.4 (KitKat) et éventuellement plus haut, une fenêtre
contextuelle apparaîtra pour autoriser le débogage USB. Cliquez sur OK pour accepter.
https://riptutorial.com/fr/home 15
version finale de votre application. Les tâches de configuration sont simples et impliquent des
tâches de base de nettoyage du code et de modification du code qui permettent d'optimiser votre
application. Le processus de génération est similaire au processus de génération de débogage et
peut être effectué à l'aide des outils JDK et Android SDK. Les tâches de test servent de
vérification finale, garantissant que votre application fonctionne comme prévu dans des conditions
réelles. Lorsque vous avez terminé de préparer votre demande de publication, vous disposez d'un
fichier APK signé, que vous pouvez distribuer directement aux utilisateurs ou distribuer via un
marché d'applications tel que Google Play.
Studio Android
Puisque dans les exemples ci-dessus, Gradle est utilisé, l'emplacement du fichier APK généré est:
<Your Project Location>/app/build/outputs/apk/app-debug.apk
IntelliJ
Si vous utilisez IntelliJ avant de passer à Studio et importez directement votre projet IntelliJ, rien
n'a changé. L'emplacement de la sortie sera le même sous:
out/production/...
Éclipse
Si vous importez directement le projet Android Eclipse, ne le faites pas! Dès que vous avez des
dépendances dans votre projet (jars ou projets de bibliothèque), cela ne fonctionnera pas et votre
projet ne sera pas correctement configuré. Si vous n'avez pas de dépendances, l'apk se trouverait
au même endroit que vous le trouveriez dans Eclipse:
bin/...
Voici un exemple minimaliste de Hello World qui utilise uniquement les outils Android les plus
élémentaires.
Exigences et hypothèses
• Oracle JDK 1.7 ou version ultérieure
• Android SDK Tools (juste les outils de ligne de commande )
Cet exemple suppose que Linux. Vous devrez peut-être ajuster la syntaxe de votre propre plate-
forme.
2. Ajoutez les répertoires JDK et SDK suivants à votre exécution PATH. Ceci est facultatif,
mais les instructions ci-dessous l'assument.
• JDK / bin
• SDK / platform-tools
• SDK / outils
• SDK / build-tools / LATEST (tel qu'installé à l'étape 1)
3. Créez un périphérique virtuel Android. Utilisez le gestionnaire AVD interactif ( android avd ).
Vous devrez peut-être bricoler un peu et chercher des conseils; les instructions sur site ne
sont pas toujours utiles.
4. Exécutez le périphérique:
Coder l'application
6. Passez à un répertoire de travail vide.
Contenu:
package dom.domain;
import android.widget.TextView;
https://riptutorial.com/fr/home 17
textV.setText( "Hello world" );
setContentView( textV );
}
}
8. Ajouter un manifeste:
touch AndroidManifest.xml
Contenu:
<?xml version='1.0'?>
<manifest xmlns:a='http://schemas.android.com/apk/res/android'
package='dom.domain' a:versionCode='0' a:versionName='0'>
<application a:label='Saying hello'>
<activity a:name='dom.domain.SayingHello'>
<intent-filter>
<category a:name='android.intent.category.LAUNCHER'/>
<action a:name='android.intent.action.MAIN'/>
</intent-filter>
</activity>
</application>
</manifest>
mkdir res
Construire le code
10. Générez la source pour les déclarations de ressources. Remplacez ici le chemin d'accès
correct à votre SDK et l' API installée pour la construire (par exemple "android-23"):
aapt package -f \
-I SDK/platforms/android-API/android.jar \
-J src -m \
-M AndroidManifest.xml -S res -v
javac \
-bootclasspath SDK/platforms/android-API/android.jar \
-classpath src -source 1.7 -target 1.7 \
src/dom/domain/*.java
https://riptutorial.com/fr/home 18
12. Traduire le bytecode de Java en Android (.class → .dex):
Vous pouvez remplacer les étapes 11 et 12 par un seul appel à Jack si vous le souhaitez; il
peut compiler directement depuis le source Java (.java → .dex). Mais la compilation avec
javac présente des avantages. C'est un outil mieux connu, mieux documenté et plus
largement applicable.
aapt package -f \
-F app.apkPart \
-I SDK/platforms/android-API/android.jar \
-M AndroidManifest.xml -S res -v
Il avertit, "CET OUTIL EST PÉRIMÉ. Voir --help pour plus d'informations." Si --help échoue
avec une ArrayIndexOutOfBoundsException , ne transmettez pas les arguments à la place:
https://riptutorial.com/fr/home 19
Installation et exécution
16. Installez l'application sur l'appareil Android:
C'est tout. C'est ce qu'il faut pour dire bonjour en utilisant les outils Android de base.
mkdir res/values
touch res/values/values.xml
Contenu:
<?xml version='1.0'?>
<resources>
<string name='appLabel'>Saying hello</string>
</resources>
19. Référencez la ressource à partir du manifeste XML. Ceci est un style de référence déclaratif:
20. Référencez la même ressource de la source Java. Ceci est une référence impérative:
https://riptutorial.com/fr/home 20
21. Testez les modifications ci-dessus en reconstruisant, en réinstallant et en réexécutant
l'application (étapes 10 à 17).
Désinstallation de l'application
adb uninstall dom.domain
Voir également
• question originale - La question originale qui a incité cet exemple
• Exemple de travail - Un script de construction qui utilise les commandes ci-dessus
Les applications Android sont écrites en Java. Les outils du SDK Android compilent les fichiers de
code, de données et de ressources dans un fichier APK (package Android). Généralement, un
fichier APK contient tout le contenu de l'application.
Chaque application s'exécute sur sa propre machine virtuelle (VM) afin que l'application puisse
s'exécuter isolée des autres applications. Le système Android fonctionne avec le principe du
moindre privilège. Chaque application n'a accès qu'aux composants dont elle a besoin pour faire
son travail, pas plus. Cependant, une application peut partager des données avec d'autres
applications, par exemple en partageant l'ID utilisateur Linux entre les applications, ou les
applications peuvent demander l'autorisation d'accéder aux données du périphérique telles que la
carte SD, les contacts, etc.
Composants de l'application
Les composants de l'application sont les éléments constitutifs d'une application Android. Chaque
composant joue un rôle spécifique dans une application Android qui sert un objectif distinct et a
des cycles de vie distincts (le flux de comment et quand le composant est créé et détruit). Voici les
quatre types de composants d'application:
1. Activités: Une activité représente un seul écran avec une interface utilisateur. Une
application Android peut avoir plusieurs activités. (Par exemple, une application de
messagerie peut avoir une activité pour répertorier tous les emails, une autre pour afficher le
contenu de chaque email et une autre pour composer un nouvel email). Toutes les activités
d'une application fonctionnent ensemble pour créer une expérience utilisateur.
2. Services: un service s'exécute en arrière-plan pour effectuer des opérations de longue
durée ou pour exécuter des tâches pour des processus distants. Un service ne fournit
aucune interface utilisateur, il s'exécute uniquement en arrière-plan avec l'entrée de
l'utilisateur. (Par exemple, un service peut lire de la musique en arrière-plan lorsque
https://riptutorial.com/fr/home 21
l'utilisateur se trouve dans une autre application ou il peut télécharger des données sur
Internet sans bloquer l'interaction de l'utilisateur avec l'appareil Android.)
3. Fournisseurs de contenu: un fournisseur de contenu gère les données d'application
partagée. Il existe quatre manières de stocker des données dans une application: elles
peuvent être écrites dans un fichier et stockées dans le système de fichiers, insérées ou
mises à jour dans une base de données SQLite, publiées sur le Web ou enregistrées dans
tout autre emplacement de stockage persistant. . Grâce à des fournisseurs de contenu,
d'autres applications peuvent interroger ou même modifier les données. (Par exemple, le
système Android fournit un fournisseur de contenu qui gère les informations de contact de
l'utilisateur afin que toute application autorisée puisse interroger les contacts.) Les
fournisseurs de contenu peuvent également enregistrer les données privées de l'application
pour une meilleure intégrité des données.
4. Récepteurs de diffusion: un récepteur de diffusion répond aux diffusions d’annonces
diffusées à l’échelle du système (par exemple, une émission annonçant que l’écran est
éteint, que la batterie est faible, etc.) ou d’applications (par exemple, téléchargé sur
l'appareil et est disponible pour qu'ils puissent l'utiliser). Les récepteurs de diffusion n'ont pas
d'interface utilisateur, mais ils peuvent afficher une notification dans la barre d'état pour
alerter l'utilisateur. Les récepteurs de diffusion sont généralement utilisés comme
passerelles vers d'autres composants de l'application, principalement des activités et des
services.
Un aspect unique du système Android est que toute application peut démarrer le composant d'une
autre application (par exemple, si vous souhaitez faire un appel, envoyer des SMS, ouvrir une
page Web ou afficher une photo, il existe déjà une application l'utiliser, au lieu de développer une
nouvelle activité pour la même tâche).
Lorsque le système démarre un composant, il lance le processus pour cette application (s'il n'est
pas déjà lancé, c'est-à-dire qu'un seul processus par application peut s'exécuter à tout moment
sur un système Android) et instancie les classes nécessaires pour ce composant. Ainsi, le
composant s'exécute sur le processus de cette application à laquelle il appartient. Par
conséquent, contrairement aux applications sur d'autres systèmes, les applications Android n'ont
pas de point d'entrée unique (il n'y a pas de méthode main() ).
Comme le système exécute chaque application dans un processus distinct, une application ne
peut pas activer directement les composants d'une autre application, quel que soit le système
Android. Ainsi, pour démarrer le composant d'une autre application, une application doit envoyer
un message au système spécifiant l'intention de démarrer ce composant, puis le système
démarrera ce composant.
Le contexte
Les instances de la classe android.content.Context fournissent la connexion au système Android
qui exécute l'application. L'instance de contexte est nécessaire pour accéder aux ressources du
projet et aux informations globales sur l'environnement de l'application.
Prenons un exemple facile à comprendre: Considérez que vous êtes dans un hôtel et que vous
voulez manger quelque chose. Vous appelez le room-service et demandez-leur de vous apporter
https://riptutorial.com/fr/home 22
des choses ou de nettoyer des choses pour vous. Maintenant, pensez à cet hôtel comme une
application Android, vous-même en tant qu’activité et le room-service est alors votre contexte, ce
qui vous permet d’accéder aux ressources de l’hôtel comme le room-service, les produits
alimentaires, etc.
Encore un autre exemple, vous êtes dans un restaurant assis sur une table, chaque table a un
accompagnateur, chaque fois que vous voulez commander des produits alimentaires, vous
demandez au préposé de le faire. Le préposé place ensuite votre commande et vos produits
alimentaires sont servis sur votre table. Encore une fois dans cet exemple, le restaurant est une
application Android, les tables ou les clients sont des composants App, les produits alimentaires
sont les ressources de votre application et le standardiste est votre contexte, ce qui vous permet
d'accéder aux ressources comme des produits alimentaires.
L'activation de l'un des composants ci-dessus nécessite l'instance du contexte. Non seulement ce
qui précède, mais presque toutes les ressources système: la création de l'interface utilisateur à
l'aide de vues (abordées plus loin), la création d'une instance de services système, le démarrage
de nouvelles activités ou services nécessitent tous un contexte.
TL; DR Il nous permet essentiellement de simuler des appareils réels et de tester nos applications
sans appareil réel.
une définition de périphérique virtuel Android (AVD) vous permet de définir les
caractéristiques d’un appareil Android Phone, Tablet, Android Wear ou Android TV que
vous souhaitez simuler dans l’émulateur Android. Le gestionnaire AVD vous aide à
créer et à gérer facilement des AVD.
https://riptutorial.com/fr/home 23
3. Cliquez maintenant sur le bouton + Create Virtual Device... Cela fera apparaître la boîte de
dialogue Virtual Device Configuration:
https://riptutorial.com/fr/home 24
4. Sélectionnez n'importe quel périphérique de votre choix, puis cliquez sur Next :
https://riptutorial.com/fr/home 25
5. Ici, vous devez choisir une version Android pour votre émulateur. Vous devrez peut-être aussi
le télécharger en premier en cliquant sur Download . Après avoir choisi une version, cliquez sur Next
.
https://riptutorial.com/fr/home 26
6. Entrez ici un nom pour votre émulateur, l'orientation initiale et si vous souhaitez afficher un
cadre autour de lui. Après avoir choisi tous ces éléments, cliquez sur Finish .
7. Vous avez maintenant un nouveau AVD prêt à lancer vos applications dessus.
https://riptutorial.com/fr/home 27
Lire Démarrer avec Android en ligne: https://riptutorial.com/fr/android/topic/85/demarrer-avec-
android
https://riptutorial.com/fr/home 28
Chapitre 2: Accès aux bases de données
SQLite à l'aide de la classe ContentValues
Examples
Insertion et mise à jour de lignes dans une base de données SQLite
Tout d'abord, vous devez ouvrir votre base de données SQLite, ce qui peut être fait comme suit:
SQLiteDatabase myDataBase;
String mPath = dbhelper.DATABASE_PATH + dbhelper.DATABASE_NAME;
myDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.OPEN_READWRITE);
Après avoir ouvert la base de données, vous pouvez facilement insérer ou mettre à jour des lignes
à l'aide de la classe ContentValues . Les exemples suivants supposent qu'un prénom est donné par
str_edtfname et un nom de famille par str_edtlname . Vous devez également remplacer table_name
par le nom de votre table que vous souhaitez modifier.
Lire Accès aux bases de données SQLite à l'aide de la classe ContentValues en ligne:
https://riptutorial.com/fr/android/topic/10154/acces-aux-bases-de-donnees-sqlite-a-l-aide-de-la-
classe-contentvalues
https://riptutorial.com/fr/home 29
Chapitre 3: ACRA
Syntaxe
• android: nom = ". ACRAHandler"
• ACRA.init (this, config);
• la classe publique ACRAHandler étend l'application {
Paramètres
Paramètre La description
Remarques
• ACRA ne prend plus en charge les formulaires Google, vous avez donc besoin d'un
backend: https://github.com/ACRA/acra/wiki/Backends
Examples
ACRAHandler
@ReportsCrashes(
)
public class ACRAHandler extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
.build();
// Initialise ACRA
https://riptutorial.com/fr/home 30
ACRA.init(this, config);
Exemple manifeste
>
<!-- Internet is required. READ_LOGS are to ensure that the Logcat is transmitted-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<application
android:allowBackup="true"
android:name=".ACRAHandler"<!-- Activates ACRA on startup -->
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
</manifest>
Installation
Maven
<dependency>
<groupId>ch.acra</groupId>
<artifactId>acra</artifactId>
<version>4.9.2</version>
<type>aar</type>
</dependency>
Gradle
compile 'ch.acra:acra:4.9.2'
https://riptutorial.com/fr/home 31
Chapitre 4: Activité
Introduction
Une activité représente un seul écran avec une interface utilisateur . Une application Android
peut avoir plusieurs activités. Par exemple, une application de messagerie peut avoir une activité
pour répertorier tous les e-mails, une autre activité pour afficher le contenu des e-mails, une autre
activité pour composer un nouvel e-mail. Toutes les activités d'une application fonctionnent
ensemble pour créer une expérience utilisateur parfaite.
Syntaxe
• annuler onCreate (Bundle savedInstanceState) // Appelé au démarrage de l'activité.
• void onStart () // Appelé après onCreate (Bundle) - ou après onRestart () lorsque l'activité a
été arrêtée, mais est à nouveau affichée pour l'utilisateur.
• void onPostResume () // Appelé lorsque l'activité est terminée (après l'appel de onResume
()).
• void onRestart () // Appelé après onStop () lorsque l'activité en cours est affichée à nouveau
pour l'utilisateur (l'utilisateur y est retourné).
• void onPause () // Appelé dans le cadre du cycle de vie d'une activité lorsqu'une activité est
en arrière-plan, mais n'a pas encore été tué.
• void onDestroy () // Effectue tout nettoyage final avant la destruction d'une activité.
• void onNewIntent (Intention intentionnelle) // Ceci est appelé pour les activités qui définissent
launchMode sur "singleTop" dans leur package, ou si un client a utilisé l'indicateur
FLAG_ACTIVITY_SINGLE_TOP lors de l'appel de startActivity (Intent).
• annulez onSaveInstanceState (Bundle outState) // Appelé pour récupérer l'état par instance
d'une activité avant d'être tué pour que l'état puisse être restauré dans onCreate (Bundle) ou
onRestoreInstanceState (Bundle) (le Bundle rempli par cette méthode sera transmis aux
deux ).
https://riptutorial.com/fr/home 32
précédemment enregistré, donné ici dans savedInstanceState.
Paramètres
Paramètre Détails
Intention Peut être utilisé avec startActivity pour lancer une activité
Remarques
Une activité est un composant d'application qui fournit un écran avec lequel les utilisateurs
peuvent interagir pour faire quelque chose, comme composer le numéro du téléphone, prendre
une photo, envoyer un courrier électronique ou afficher une carte. Chaque activité se voit attribuer
une fenêtre dans laquelle dessiner son interface utilisateur. La fenêtre remplit généralement
l'écran, mais peut être plus petite que l'écran et flotter au-dessus des autres fenêtres.
Examples
Exclure une activité de l'historique de la pile arrière
Que l'activité B puisse être ouverte et que d'autres activités puissent être lancées. Mais l'utilisateur
ne devrait pas le rencontrer lors de la navigation dans les activités de tâche.
https://riptutorial.com/fr/home 33
La solution la plus simple consiste à définir l'attribut noHistory sur true pour cette <activity> dans
AndroidManifest.xml :
<activity
android:name=".B"
android:noHistory="true">
Ce même comportement est également possible à partir du code si B appelle finish() avant de
démarrer l'activité suivante:
finish();
startActivity(new Intent(context, C.class));
L'utilisation typique du drapeau noHistory est avec "Splash Screen" ou Login Activities.
Supposons une application avec une MainActivity qui puisse appeler l'activité suivante en cliquant
https://riptutorial.com/fr/home 34
sur un bouton.
@Override
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "calling onPause from MainActivity");
}
@Override
protected void onStop() {
super.onStop();
Log.d(LOG_TAG, "calling onStop from MainActivity");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "calling onDestroy from MainActivity");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(LOG_TAG, "calling onRestart from MainActivity");
}
public void toNextActivity(){
Log.d(LOG_TAG, "calling Next Activity");
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
} }
et
https://riptutorial.com/fr/home 35
Log.d(LOG_TAG, "calling onCreate from Next Activity");
}
@Override
protected void onStart() {
super.onStart();
Log.d(LOG_TAG, "calling onStart from Next Activity");
}
@Override
protected void onResume() {
super.onResume();
Log.d(LOG_TAG, "calling onResume from Next Activity");
}
@Override
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "calling onPause from Next Activity");
}
@Override
protected void onStop() {
super.onStop();
Log.d(LOG_TAG, "calling onStop from Next Activity");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "calling onDestroy from Next Activity");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(LOG_TAG, "calling onRestart from Next Activity");
} }
https://riptutorial.com/fr/home 36
D / NextActivity: appeler onCreate à partir de l'activité suivante
D / NextActivity: appel de onStart à partir de l'activité suivante
D / NextActivity: appeler onResume à partir de l'activité suivante
D / MainActivity: appel de onStop depuis MainActivity
Lorsque vous revenez à l'activité principale à partir de l'activité suivante à l'aide du bouton retour
D / NextActivity: appeler onPause à partir de l'activité suivante
D / MainActivity: appeler onRestart à partir de MainActivity
D / MainActivity: appel de onStart depuis MainActivity
D / MainActivity: appel à onResume à partir de MainActivity
D / NextActivity: appeler onStop à partir de l'activité suivante
D / NextActivity: appeler onDestroy à partir de l'activité suivante
Cas 2: Lorsque l'activité est partiellement masquée (lorsque le bouton Vue d'ensemble est
enfoncé) ou lorsque l'application passe en arrière-plan et qu'une autre application la masque
complètement
D / MainActivity: appel de onPause à partir de MainActivity
D / MainActivity: appel de onStop depuis MainActivity
et lorsque l'application est de retour au premier plan prête à accepter les entrées utilisateur,
D / MainActivity: appeler onRestart à partir de MainActivity
D / MainActivity: appel de onStart depuis MainActivity
D / MainActivity: appel à onResume à partir de MainActivity
sont appelés
Cas 3: Lorsqu'une activité est appelée pour remplir une intention implicite et que l'utilisateur a
effectué une sélection. Par exemple, lorsque vous appuyez sur le bouton Partager et que
l'utilisateur doit sélectionner une application dans la liste des applications affichées
D / MainActivity: appel de onPause à partir de MainActivity
L'activité est visible mais pas active maintenant. Lorsque la sélection est terminée et que
l'application est active
D / MainActivity: appel à onResume à partir de MainActivity
est appelé
Cas4:
Lorsque l'application est tuée en arrière-plan (pour libérer des ressources pour une autre
application au premier plan), onPause (pour le périphérique pré-en nid d'abeilles) ou onStop (pour
le périphérique en nid d'abeille) sera le dernier à être appelé avant la fin de l'application.
onCreate et onDestroy seront appelés au maximum une fois à chaque exécution de l'application.
Mais onPause, onStop, onRestart, onStart, onResume peuvent être appelés plusieurs fois au
cours du cycle de vie.
Le mode de lancement définit le comportement d'une activité nouvelle ou existante dans la tâche.
Il existe des modes de lancement possibles:
https://riptutorial.com/fr/home 37
• la norme
• unique
• singleTask
• seule instance
Il doit être défini dans le manifeste Android dans l'élément <activity/> tant android:launchMode .
<activity
android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance"] />
La norme:
Valeur par défaut. Si ce mode est défini, une nouvelle activité sera toujours créée pour chaque
nouvelle intention. Il est donc possible d'obtenir de nombreuses activités du même type. Une
nouvelle activité sera placée en haut de la tâche. Il existe une différence pour les différentes
versions d'Android: si l'activité commence à partir d'une autre application, sur les androïdes <=
4.4, elle sera placée dans la même tâche que l'application de démarrage, mais la nouvelle tâche>
= 5.0 sera créée.
SingleTop:
Ce mode est presque identique à la standard . De nombreuses instances d'activité singleTop
peuvent être créées. La différence est que, si une instance d'activité existe déjà en haut de la pile
en cours, onNewIntent() sera appelé au lieu de créer une nouvelle instance.
SingleTask:
L'activité avec ce mode de lancement ne peut avoir qu'une seule instance dans le système . Une
nouvelle tâche pour l'activité sera créée, si elle n'existe pas. Sinon, la tâche avec activité sera
déplacée vers l'avant et onNewIntent sera appelée.
Seule instance:
Ce mode est similaire à singleTask . La différence est que la tâche qui détient une activité avec
singleInstance ne peut avoir que cette activité et rien de plus. Lorsque l'activité d' singleInstance
crée une autre activité, une nouvelle tâche sera créée pour placer cette activité.
La classe d'activité prend soin de créer une fenêtre dans laquelle vous pouvez placer votre
interface utilisateur avec setContentView .
https://riptutorial.com/fr/home 38
Il existe trois méthodes setContentView :
Lorsque setContentView est appelée, cette vue est placée directement dans la hiérarchie de vues
de l'activité. Elle peut elle-même être une hiérarchie de vues complexe.
Exemples
Définir le contenu du fichier de ressources:
Ajoutez le fichier de ressources (main.xml dans cet exemple) avec la hiérarchie de vue:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello" />
</FrameLayout>
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
https://riptutorial.com/fr/home 39
super.onCreate(savedInstanceState);
Si vous souhaitez effacer votre pile d'activité actuelle et lancer une nouvelle activité (par exemple,
vous déconnecter de l'application et lancer une activité de connexion), il semble qu'il y ait deux
approches.
<activity
android:name="com.your_example_app.activities.ExitActivity"
android:autoRemoveFromRecents="true"
android:theme="@android:style/Theme.NoDisplay" />
/**
* Activity to exit Application without staying in the stack of last opened applications
*/
public class ExitActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Utils.hasLollipop()) {
finishAndRemoveTask();
} else if (Utils.hasJellyBean()) {
finishAffinity();
https://riptutorial.com/fr/home 40
} else {
finish();
}
}
/**
* Exit Application and Exclude from Recents
*
* @param context Context to use
*/
public static void exitApplication(ApplicationContext context) {
Intent intent = new Intent(context, ExitActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(intent);
}
}
<application
android:name=".SkillSchoolApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ui.activities.SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Maintenant, quand je clique sur la flèche dans la barre d'outils de HomeActivity, cela me ramène à
l'activité parent.
Code Java
https://riptutorial.com/fr/home 41
public class HomeActivity extends AppCompatActivity {
@BindView(R.id.toolbar)
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.bind(this);
//Since i am using custom tool bar i am setting refernce of that toolbar to Actionbar.
If you are not using custom then you can simple leave this and move to next line
setSupportActionBar(toolbar);
getSupportActionBar.setDisplayHomeAsUpEnabled(true); // this will show the back arrow
in the tool bar.
}
}
Si vous exécutez ce code, vous verrez que lorsque vous appuyez sur le bouton retour, vous
revenez à MainActivity. Pour une meilleure compréhension de Up Navigation, je vous
recommande de lire docs
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this); // Here you will write your logic for handling
up navigation
return true;
}
return super.onOptionsItemSelected(item);
}
Piratage simple
C'est un simple hack qui est principalement utilisé pour naviguer vers l'activité parent si le parent
est en backstack. En appelant onBackPressed() si id est égal à android.R.id.home
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
https://riptutorial.com/fr/home 42
Chapitre 5: ADB (Android Debug Bridge)
Introduction
ADB (Android Debug Bridge) est un outil de ligne de commande utilisé pour communiquer avec
une instance d'émulateur ou un périphérique Android connecté.
Remarques
Liste des exemples déplacés dans le shell adb :
Examples
Imprimer la liste détaillée des appareils connectés
Pour obtenir une liste détaillée de tous les périphériques connectés à adb , écrivez la commande
suivante dans votre terminal:
adb devices -l
Exemple de sortie
https://riptutorial.com/fr/home 43
A50PL device usb:331592812X
• La première colonne est le numéro de série de l'appareil. Si elle commence par emulator- ,
cet appareil est un émulateur.
• usb: le chemin du périphérique dans le sous-système USB.
• product: le code produit de l'appareil. Ceci est très spécifique au fabricant et, comme vous
pouvez le voir dans le cas de l'appareil Archos A50PL ci-dessus, il peut être vide.
• model: le modèle d'appareil. Comme le product , peut être vide.
• device: le code de l'appareil. Ceci est également très spécifique au fabricant et peut être
vide.
Cela imprimera toutes les informations disponibles sous la forme de paires clé / valeur.
Vous pouvez simplement lire des informations spécifiques en ajoutant le nom d'une clé spécifique
à la commande. Par exemple:
[dalvik.vm.dex2oat-Xms]: [64m]
[dalvik.vm.dex2oat-Xmx]: [512m]
[dalvik.vm.heapsize]: [384m]
[dalvik.vm.image-dex2oat-Xms]: [64m]
[dalvik.vm.image-dex2oat-Xmx]: [64m]
[dalvik.vm.isa.x86.variant]: [dalvik.vm.isa.x86.features=default]
[dalvik.vm.isa.x86_64.features]: [default]
[dalvik.vm.isa.x86_64.variant]: [x86_64]
[dalvik.vm.lockprof.threshold]: [500]
[dalvik.vm.stack-trace-file]: [/data/anr/traces.txt]
[debug.atrace.tags.enableflags]: [0]
[debug.force_rtl]: [0]
[dev.bootcomplete]: [1]
[gsm.current.phone-type]: [1]
[gsm.defaultpdpcontext.active]: [true]
[gsm.network.type]: [UMTS]
[gsm.nitz.time]: [1469106902492]
[gsm.operator.alpha]: [Android]
[gsm.operator.iso-country]: [us]
https://riptutorial.com/fr/home 44
[gsm.operator.isroaming]: [false]
[gsm.operator.numeric]: [310260]
[gsm.sim.operator.alpha]: [Android]
[gsm.sim.operator.iso-country]: [us]
[gsm.sim.operator.numeric]: [310260]
[gsm.sim.state]: [READY]
[gsm.version.ril-impl]: [android reference-ril 1.0]
[init.svc.adbd]: [running]
[init.svc.bootanim]: [stopped]
[init.svc.console]: [running]
[init.svc.debuggerd]: [running]
[init.svc.debuggerd64]: [running]
[init.svc.drm]: [running]
[init.svc.fingerprintd]: [running]
[init.svc.gatekeeperd]: [running]
[init.svc.goldfish-logcat]: [stopped]
[init.svc.goldfish-setup]: [stopped]
[init.svc.healthd]: [running]
[init.svc.installd]: [running]
[init.svc.keystore]: [running]
[init.svc.lmkd]: [running]
[init.svc.logd]: [running]
[init.svc.logd-reinit]: [stopped]
[init.svc.media]: [running]
[init.svc.netd]: [running]
[init.svc.perfprofd]: [running]
[init.svc.qemu-props]: [stopped]
[init.svc.ril-daemon]: [running]
[init.svc.servicemanager]: [running]
[init.svc.surfaceflinger]: [running]
[init.svc.ueventd]: [running]
[init.svc.vold]: [running]
[init.svc.zygote]: [running]
[init.svc.zygote_secondary]: [running]
[net.bt.name]: [Android]
[net.change]: [net.dns2]
[net.dns1]: [10.0.2.3]
[net.dns2]: [10.0.2.4]
[net.eth0.dns1]: [10.0.2.3]
[net.eth0.dns2]: [10.0.2.4]
[net.eth0.gw]: [10.0.2.2]
[net.gprs.local-ip]: [10.0.2.15]
[net.hostname]: [android-5e1af924d72dc578]
[net.qtaguid_enabled]: [1]
[net.tcp.default_init_rwnd]: [60]
[persist.sys.dalvik.vm.lib.2]: [libart.so]
[persist.sys.profiler_ms]: [0]
[persist.sys.timezone]: [Europe/Vienna]
[persist.sys.usb.config]: [adb]
[qemu.gles]: [1]
[qemu.hw.mainkeys]: [0]
[qemu.sf.fake_camera]: [none]
[qemu.sf.lcd_density]: [560]
[rild.libargs]: [-d /dev/ttyS0]
[rild.libpath]: [/system/lib/libreference-ril.so]
[ro.allow.mock.location]: [0]
[ro.baseband]: [unknown]
[ro.board.platform]: []
[ro.boot.hardware]: [ranchu]
[ro.bootimage.build.date]: [Thu Jul 7 15:56:30 UTC 2016]
[ro.bootimage.build.date.utc]: [1467906990]
https://riptutorial.com/fr/home 45
[ro.bootimage.build.fingerprint]:
[Android/sdk_google_phone_x86_64/generic_x86_64:6.0/MASTER/3038907:userdebug/test-keys]
[ro.bootloader]: [unknown]
[ro.bootmode]: [unknown]
[ro.build.characteristics]: [emulator]
[ro.build.date]: [Thu Jul 7 15:55:30 UTC 2016]
[ro.build.date.utc]: [1467906930]
[ro.build.description]: [sdk_google_phone_x86_64-userdebug 6.0 MASTER 3038907 test-keys]
[ro.build.display.id]: [sdk_google_phone_x86_64-userdebug 6.0 MASTER 3038907 test-keys]
[ro.build.fingerprint]:
[Android/sdk_google_phone_x86_64/generic_x86_64:6.0/MASTER/3038907:userdebug/test-keys]
[ro.build.flavor]: [sdk_google_phone_x86_64-userdebug]
[ro.build.host]: [vpak15.mtv.corp.google.com]
[ro.build.id]: [MASTER]
[ro.build.product]: [generic_x86_64]
[ro.build.tags]: [test-keys]
[ro.build.type]: [userdebug]
[ro.build.user]: [android-build]
[ro.build.version.all_codenames]: [REL]
[ro.build.version.base_os]: []
[ro.build.version.codename]: [REL]
[ro.build.version.incremental]: [3038907]
[ro.build.version.preview_sdk]: [0]
[ro.build.version.release]: [6.0]
[ro.build.version.sdk]: [23]
[ro.build.version.security_patch]: [2015-10-01]
[ro.com.google.locationfeatures]: [1]
[ro.config.alarm_alert]: [Alarm_Classic.ogg]
[ro.config.nocheckin]: [yes]
[ro.config.notification_sound]: [OnTheHunt.ogg]
[ro.crypto.state]: [unencrypted]
[ro.dalvik.vm.native.bridge]: [0]
[ro.debuggable]: [1]
[ro.hardware]: [ranchu]
[ro.hardware.audio.primary]: [goldfish]
[ro.kernel.android.checkjni]: [1]
[ro.kernel.android.qemud]: [1]
[ro.kernel.androidboot.hardware]: [ranchu]
[ro.kernel.clocksource]: [pit]
[ro.kernel.console]: [0]
[ro.kernel.ndns]: [2]
[ro.kernel.qemu]: [1]
[ro.kernel.qemu.gles]: [1]
[ro.opengles.version]: [131072]
[ro.product.board]: []
[ro.product.brand]: [Android]
[ro.product.cpu.abi]: [x86_64]
[ro.product.cpu.abilist]: [x86_64,x86]
[ro.product.cpu.abilist32]: [x86]
[ro.product.cpu.abilist64]: [x86_64]
[ro.product.device]: [generic_x86_64]
[ro.product.locale]: [en-US]
[ro.product.manufacturer]: [unknown]
[ro.product.model]: [Android SDK built for x86_64]
[ro.product.name]: [sdk_google_phone_x86_64]
[ro.radio.use-ppp]: [no]
[ro.revision]: [0]
[ro.runtime.firstboot]: [1469106908722]
[ro.secure]: [1]
[ro.serialno]: []
[ro.wifi.channels]: []
https://riptutorial.com/fr/home 46
[ro.zygote]: [zygote64_32]
[selinux.reload_policy]: [1]
[service.bootanim.exit]: [1]
[status.battery.level]: [5]
[status.battery.level_raw]: [50]
[status.battery.level_scale]: [9]
[status.battery.state]: [Slow]
[sys.boot_completed]: [1]
[sys.sysctl.extra_free_kbytes]: [43200]
[sys.sysctl.tcp_def_init_rwnd]: [60]
[sys.usb.config]: [adb]
[sys.usb.state]: [adb]
[vold.has_adoptable]: [1]
[wlan.driver.status]: [unloaded]
[xmpp.auto-presence]: [true]
• Assurez-vous que votre appareil et votre ordinateur sont sur le même réseau.
Alors que votre appareil est connecté à adb via USB, adb la commande suivante pour écouter
une connexion TCP / IP sur un port (par défaut 5555):
Par exemple:
https://riptutorial.com/fr/home 47
Pour revenir au débogage via USB, utilisez la commande suivante:
adb usb
Vous pouvez également connecter ADB via WiFi en installant un plug-in sur Android Studio.
Pour ce faire, accédez à Paramètres> Plug -ins et Parcourir les référentiels, recherchez ADB
WiFi , installez-le et rouvrez Android Studio. Vous verrez une nouvelle icône dans votre
barre d'outils, comme indiqué dans l'image suivante. Connectez l'appareil à l'ordinateur hôte
via USB et cliquez sur cette icône AndroidWiFiADB . Il affichera un message indiquant si
votre appareil est connecté ou non. Une fois connecté, vous pouvez débrancher votre clé
USB.
Appareil enraciné
Remarque: Certains appareils qui sont enracinés peuvent utiliser l'App WiFi ADB du Play Store
pour activer cela de manière simple. En outre, pour certains périphériques (en particulier ceux
dotés de ROM CyanogenMod), cette option est présente dans les options de développement
parmi les paramètres. L'activer vous donnera l'adresse IP et le numéro de port requis pour vous
connecter à adb en exécutant simplement adb connect <ip address>:<port> .
Lorsque vous avez un périphérique rooté mais que vous n'avez pas accès à
un câble USB
su
setprop service.adb.tcp.port <a tcp port number>
stop adbd
start adbd
Par exemple:
Par exemple:
https://riptutorial.com/fr/home 48
adb connect 192.168.1.2:5555
Pour l'éteindre:
setprop service.adb.tcp.port -1
stop adbd
start adbd
Par défaut, adb après 5000 ms. Cela peut arriver dans certains cas, comme le WiFi lent ou un
grand APK.
android {
adbOptions {
timeOutInMs 10 * 1000
}
}
Par exemple:
Vous pouvez également pousser (télécharger) des fichiers de votre ordinateur vers le
périphérique:
Par exemple:
Redémarrer le périphérique
https://riptutorial.com/fr/home 49
Vous pouvez redémarrer votre appareil en exécutant la commande suivante:
adb reboot
Allumer:
Éteindre:
Commander:
adb devices
Exemple de résultat:
Documentation Android
https://riptutorial.com/fr/home 50
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd
Après cela, vous pouvez utiliser CMD et ADB pour vous connecter en utilisant la commande
suivante
setprop service.adb.tcp.port -1
stop adbd
start adbd
Depuis un ordinateur, si vous avez déjà un accès USB (aucune racine requise)
Il est encore plus facile de passer à l’utilisation du Wi-Fi si vous avez déjà une connexion USB. À
partir d’une ligne de commande sur l’ordinateur sur lequel le périphérique est connecté via USB,
émettez les commandes
Démarrer ADB:
adb kill-server
Arrêtez ADB:
adb start-server
Voir logcat
Vous pouvez exécuter logcat tant que commande adb ou directement à l'invite du shell de votre
émulateur ou périphérique connecté. Pour afficher la sortie du journal à l'aide d' adb , accédez à
votre répertoire platform-tools / toolkit SDK et exécutez:
$ adb logcat
Vous pouvez également créer une connexion shell à un périphérique puis exécuter:
$ adb shell
https://riptutorial.com/fr/home 51
$ logcat
Cela affiche la date, l'heure d'appel, la priorité, la balise et le PID et le TID du thread émettant le
message dans un format de message long.
Filtration
Vous pouvez également filtrer logcat par niveau de journalisation. Par exemple, si vous souhaitez
uniquement afficher le niveau de débogage:
Logcat peut être filtré par un nom de package, bien sûr, vous pouvez le combiner avec le filtre de
niveau de journalisation:
Vous pouvez également filtrer le journal à l'aide de grep (plus d'informations sur le filtrage des
résultats de logcat ici ):
Dans Windows, le filtre peut être utilisé avec findstr, par exemple:
Pour afficher un autre tampon de journal [main | events | radio], exécutez le logcat avec l'option -b
:
https://riptutorial.com/fr/home 52
Nettoyage des journaux:
adb logcat -c
Utilisez l'option -s suivie d'un nom de périphérique pour sélectionner le périphérique sur lequel la
commande adb doit s'exécuter. Les options -s doivent être en première ligne, avant la commande.
Exemple:
adb devices
Exemple # 2:
adb devices -l
adb -e <command>
adb -d <command>
Prendre une capture d'écran et une vidéo (pour kitkat uniquement) à partir
d'un écran de périphérique
https://riptutorial.com/fr/home 53
Capture d'écran: Option 1 (pure adb)
La commande shell adb nous permet d'exécuter des commandes à l'aide du shell intégré d'un
périphérique. La commande shell screencap capture le contenu actuellement visible sur un
périphérique et l'enregistre dans un fichier image donné, par exemple /sdcard/screen.png :
Vous pouvez ensuite utiliser la commande pull pour télécharger le fichier depuis le périphérique
dans le répertoire actuel de votre ordinateur:
L' -p redirige la sortie de la commande screencap vers stdout. L'expression Perl dans laquelle elle
est dirigée nettoie certains problèmes de fin de ligne sur Marshmallow et les versions antérieures.
Le flux est ensuite écrit dans un fichier nommé screen.png dans le répertoire en cours. Voir cet
article et cet article pour plus d'informations.
Vidéo
cela ne fonctionne que dans KitKat et via ADB uniquement. Cela ne fonctionne pas sous Kitkat
Pour commencer à enregistrer l'écran de votre appareil, exécutez la commande suivante:
Une fois l'enregistrement terminé, appuyez sur Ctrl + C (z sous Linux) dans la fenêtre d'invite de
commandes pour arrêter l'enregistrement à l'écran. Vous pouvez ensuite trouver le fichier
d'enregistrement d'écran à l'emplacement que vous avez spécifié. Notez que l'enregistrement
d'écran est enregistré dans la mémoire interne de votre appareil et non sur votre ordinateur.
https://riptutorial.com/fr/home 54
Les paramètres par défaut consistent à utiliser la résolution d'écran standard de votre appareil, à
encoder la vidéo à un débit de 4 Mbits / s et à définir la durée maximale d'enregistrement sur
l'écran à 180 secondes. Pour plus d'informations sur les options de ligne de commande que vous
pouvez utiliser, exécutez la commande suivante:
adb shell screenrecord –help , Cela fonctionne sans rooter le périphérique. J'espère que cela
t'aides.
On peut effacer les données d'utilisateur d'une application spécifique en utilisant adb :
C'est la même chose que pour parcourir les paramètres du téléphone, sélectionnez l'application et
appuyez sur le bouton Effacer les données.
Envoi de diffusion
Dans cet exemple, nous envoyons la diffusion avec l'action com.test.app.ACTION et la chaîne extra
dans le bundle 'foo'='bar' :
Vous pouvez mettre tout autre type pris en charge pour regrouper, pas seulement les chaînes:
--ez - booléen
--ei - entier
--el - long
--ef - float
--eu - uri
--eia - int array (séparé par ',')
--ela - tableau long (séparé par ',')
--efa - tableau flottant (séparé par ',')
--esa - tableau de chaînes (séparé par ',')
Pour envoyer l'intention à un paquet / classe spécifique, le paramètre -n ou -p peut être utilisé.
Envoi à forfait:
-p com.test.app
https://riptutorial.com/fr/home 55
-n com.test.app/.SomeReceiver
Exemples utiles:
Utilisez la commande suivante pour démarrer une application avec un nom de package fourni (ou
une activité spécifique dans une application):
Sauvegarde
Vous pouvez utiliser la commande de adb backup pour sauvegarder votre appareil.
-f <filename> spécifie le nom de fichier par défaut: crée une sauvegarde.ab dans le répertoire en
cours
-obb|noobb activer / désactiver la sauvegarde des fichiers supplémentaires par défaut: -noobb
https://riptutorial.com/fr/home 56
-system|nosystem inclut les applications système par défaut: -system
Comment installer Android Debugging Bridge (ADB) sur un système Linux avec le terminal
utilisant les référentiels de votre distribution.
https://riptutorial.com/fr/home 57
adb shell pm list permissions -g -d
Tout d'abord, assurez-vous que votre application peut être sauvegardée dans AndroidManifest.xml
, à savoir android:allowBackup n'est pas false .
Commande de sauvegarde:
Extraire le goudron:
watch -n 5 "adb -s <serialNumber> shell dumpsys activity activities | sed -En -e '/Stack #/p'
-e '/Running activities/,/Run #0/p'"
Vous pouvez utiliser cette commande pour répertorier les fichiers de votre propre apk déboguable:
Et ce script pour tirer du cache, cela copie le contenu à sdcard d'abord, le tire puis le supprime à
la fin:
#!/bin/sh
adb shell "run-as <sample.package.id> cat '/data/data/<sample.package.id>/$1' > '/sdcard/$1'"
adb pull "/sdcard/$1"
adb shell "rm '/sdcard/$1'"
https://riptutorial.com/fr/home 58
./pull.sh cache/someCachedData.txt
https://riptutorial.com/fr/home 59
Chapitre 6: AdMob
Syntaxe
• compiler 'com.google.firebase: annonces firebase: 10.2.1' // REMARQUE: DÉFINIR LA
NOUVELLE VERSION SI DISPONIBLE
• <uses-permission android:name="android.permission.INTERNET" /> Obligatoire pour récupérer
l'annonce
• AdRequest adRequest = new AdRequest.Builder (). Build (); // Bannière publicitaire
• AdView mAdView = (AdView) findViewById (R.id.adView) // Annonce publicitaire
• mAdView.loadAd (adRequest); // Bannière publicitaire
Paramètres
Param Détails
Remarques
• Nécessite un compte Admob valide
• Lisez la politique d'admob . Assurez-vous de ne rien faire qui puisse suspendre votre
compte d'admob
Examples
Exécution
Remarque: Cet exemple nécessite un compte Admob valide et un code d'annonce Admob valide.
compile 'com.google.firebase:firebase-ads:10.2.1'
https://riptutorial.com/fr/home 60
Manifeste
L'autorisation Internet est requise pour accéder aux données d'annonce. Notez qu'il n'est pas
nécessaire de demander cette autorisation (en utilisant API 23+) car il s'agit d'une autorisation
normale et non dangereuse:
XML
L'exemple XML suivant montre une bannière publicitaire:
<com.google.android.gms.ads.AdView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/adView"
ads:adSize="BANNER"
ads:adUnitId="@string/main_screen_ad" />
Java
Le code suivant concerne l'intégration de bannières publicitaires. Notez que d'autres types
d'annonces peuvent nécessiter une intégration différente:
Ajoutez les méthodes de cycle de vie AdView dans les méthodes onResume() , onPause() et
onDestroy() de votre activité:
@Override
public void onPause() {
if (mAdView != null) {
mAdView.pause();
}
super.onPause();
}
@Override
public void onResume() {
https://riptutorial.com/fr/home 61
super.onResume();
if (mAdView != null) {
mAdView.resume();
}
}
@Override
public void onDestroy() {
if (mAdView != null) {
mAdView.destroy();
}
super.onDestroy();
}
https://riptutorial.com/fr/home 62
Chapitre 7: Affichage
Introduction
Tout ce qui concerne la personnalisation de TextView dans le SDK Android
Syntaxe
• TextView (contexte contextuel)
• (TextView) findViewById (int id)
• void setText (int resid)
• void setText (texte CharSequence) // Vous pouvez utiliser String comme argument
Remarques
Essayez de l'utiliser dans la conception XML ou par programme.
Examples
Textview avec une taille de texte différente
Vous pouvez archiver différents Textsizes dans une Textview avec un Span
Personnalisation de TextView
https://riptutorial.com/fr/home 63
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs,
R.styleable.CustomTextView);
if (a.hasValue(R.styleable.CustomTextView_strokeColor)) {
float strokeWidth =
a.getDimensionPixelSize(R.styleable.CustomTextView_strokeWidth, 1);
int strokeColor = a.getColor(R.styleable.CustomTextView_strokeColor,
0xff000000);
float strokeMiter =
a.getDimensionPixelSize(R.styleable.CustomTextView_strokeMiter, 10);
Paint.Join strokeJoin = null;
switch (a.getInt(R.styleable.CustomTextView_strokeJoinStyle, 0)) {
case (0):
strokeJoin = Paint.Join.MITER;
break;
case (1):
strokeJoin = Paint.Join.BEVEL;
break;
case (2):
strokeJoin = Paint.Join.ROUND;
break;
}
this.setStroke(strokeWidth, strokeColor, strokeJoin, strokeMiter);
}
}
}
public void setStroke(float width, int color, Paint.Join join, float miter) {
strokeWidth = width;
strokeColor = color;
strokeJoin = join;
strokeMiter = miter;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
https://riptutorial.com/fr/home 64
Usage:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Disposition:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@mipmap/background">
<pk.sohail.gallerytest.activity.CustomTextView
android:id="@+id/pager_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/txt_title_photo_gallery"
android:textColor="@color/white"
android:textSize="30dp"
android:textStyle="bold"
app:outerShadowRadius="10dp"
app:strokeColor="@color/title_text_color"
app:strokeJoinStyle="miter"
app:strokeWidth="2dp" />
</RelativeLayout>
attars:
<declare-styleable name="CustomTextView">
https://riptutorial.com/fr/home 65
</resources>
TextView Spannable
Un TextView pouvant être TextView peut être utilisé dans Android pour mettre en évidence une
partie particulière du texte avec une couleur, un style, une taille et / ou un événement de clic
différents dans un seul widget TextView .
TextView textview=findViewById(R.id.textview);
Ensuite, vous pouvez appliquer différentes mises en évidence comme indiqué ci-dessous:
• Couleur Spanable: pour définir une couleur différente sur une partie du texte, vous pouvez
utiliser ForegroundColorSpan , comme illustré dans l'exemple suivant:
• Police Spanable: pour définir une taille de police différente sur une partie du texte, vous
pouvez utiliser RelativeSizeSpan , comme illustré dans l'exemple suivant:
https://riptutorial.com/fr/home 66
• Police de caractères Spanable: pour définir une police de caractères différente sur une
partie du texte, vous pouvez utiliser un TypefaceSpan personnalisé, comme illustré dans
l'exemple suivant:
Cependant, pour que le code ci-dessus fonctionne, la classe CustomTypefaceSpan doit être
dérivée de la classe TypefaceSpan . Cela peut être fait comme suit:
@Override
public void updateDrawState(TextPaint ds) {
applyCustomTypeFace(ds, newType);
}
@Override
public void updateMeasureState(TextPaint paint) {
applyCustomTypeFace(paint, newType);
}
paint.setTypeface(tf);
}
}
https://riptutorial.com/fr/home 67
TextView avec image
Android permet aux programmeurs de placer des images aux quatre coins d'un TextView . Par
exemple, si vous créez un champ avec un objet TextView et que vous souhaitez montrer que le
champ est modifiable, les développeurs placent généralement une icône d'édition à proximité de
ce champ. Android nous offre une option intéressante appelée composé extractible pour un
TextView :
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:drawablePadding="4dp"
android:drawableRight="@drawable/edit"
android:text="Hello world"
android:textSize="18dp" />
Vous pouvez définir le dessin sur n'importe quel côté de votre TextView comme suit:
android:drawableLeft="@drawable/edit"
android:drawableRight="@drawable/edit"
android:drawableTop="@drawable/edit"
android:drawableBottom="@drawable/edit"
Le paramétrage du dessin peut également être réalisé par programmation de la manière suivante:
La définition de l'un des paramètres remis à setCompoundDrawables() sur null supprimera l'icône du
côté correspondant de TextView .
Texte barré
https://riptutorial.com/fr/home 68
StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
spanBuilder.setSpan(
strikethroughSpan, // Span to add
0, // Start
4, // End of the span (exclusive)
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE // Text changes will not reflect in the strike
changing
);
textView.setText(spanBuilder);
MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
activity_main.xml:
<com.customthemeattributedemo.customview.CustomTextView
style="?mediumTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="@string/message_hello"
custom:font_family="@string/bold_font" />
<com.customthemeattributedemo.customview.CustomTextView
style="?largeTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="@string/message_hello"
custom:font_family="@string/bold_font" />
</LinearLayout>
CustomTextView.java:
https://riptutorial.com/fr/home 69
public class CustomTextView extends TextView {
attrs.xml:
<declare-styleable name="CustomTextView">
</declare-styleable>
</resources>
strings.xml:
<resources>
<string name="app_name">Custom Style Theme Attribute Demo</string>
<string name="message_hello">Hello Hiren!</string>
<string name="bold_font">bold.ttf</string>
</resources>
https://riptutorial.com/fr/home 70
styles.xml:
<resources>
<item name="mediumTextStyle">@style/textMedium</item>
<item name="largeTextStyle">@style/textLarge</item>
</style>
<style name="textParentStyle">
<item name="android:textColor">@android:color/white</item>
<item name="android:background">@color/colorPrimary</item>
<item name="android:padding">5dp</item>
</style>
</resources>
Pour rendre un RelativeSizeSpan aligné sur le haut, une classe personnalisée peut être dérivée de
la classe SuperscriptSpan . Dans l'exemple suivant, la classe dérivée est nommée
TopAlignSuperscriptSpan :
activity_main.xml:
<TextView
android:id="@+id/txtView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:textSize="26sp" />
MainActivity.java:
https://riptutorial.com/fr/home 71
TopAlignSuperscriptSpan.java:
//doesn't shift
TopAlignSuperscriptSpan() {}
@Override
public void updateDrawState( TextPaint tp ) {
//original ascent
float ascent = tp.ascent();
//move baseline to top of old font, then move down size of new font
//adjust for errors with shift percentage
tp.baselineShift += ( ascent - ascent * shiftPercentage )
- (newAscent - newAscent * shiftPercentage );
}
@Override
public void updateMeasureState( TextPaint tp ) {
updateDrawState( tp );
}
}
https://riptutorial.com/fr/home 72
Pinchzoom sur TextView
activity_main.xml :
<TextView
android:id="@+id/mytv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="This is my sample text for pinch zoom demo, you can zoom in and out
using pinch zoom, thanks" />
</RelativeLayout>
MainActivity.java :
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
https://riptutorial.com/fr/home 73
mytv.setTextSize(mRatio + 13);
}
}
return true;
}
Le texte coloré peut être créé en transmettant le texte et un nom de couleur de police à la fonction
suivante:
Le texte en couleur peut alors être défini sur un TextView (ou même sur un Button , EditText , etc.)
en utilisant l'exemple de code ci-dessous.
txtView.setText(Html.fromHtml(name+" "+surName));
https://riptutorial.com/fr/home 74
Lire Affichage en ligne: https://riptutorial.com/fr/android/topic/4212/affichage
https://riptutorial.com/fr/home 75
Chapitre 8: Affichage des annonces Google
Examples
Configuration de base de l'annonce
compile 'com.google.firebase:firebase-ads:10.2.1'
Ensuite, vous devrez ajouter des informations pertinentes dans votre fichier strings.xml.
<string name="banner_ad_unit_id">ca-app-pub-####/####</string>
Ensuite, placez un avis là où vous le souhaitez et modifiez-le comme n'importe quelle autre vue.
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>
MobileAds.initialize(getApplicationContext(), "ca-app-pub-YOUR_ID");
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
Si vous copiez-collé exactement, vous devriez maintenant avoir une petite bannière publicitaire.
Placez simplement plus de vues AdViews partout où vous en avez besoin pour plus.
Les annonces interstitielles sont des annonces en plein écran qui couvrent l'interface de leur
application hôte. Ils sont généralement affichés à des points de transition naturels dans le flux
d'une application, par exemple entre les activités ou pendant la pause entre les niveaux d'un jeu.
https://riptutorial.com/fr/home 76
1. Accédez à votre compte AdMob .
5. Une fois le bloc d'annonces créé, vous pouvez remarquer l'ID du bloc d'annonces sur le
tableau de bord. Par exemple: ca-app-pub-00000000000/000000000
compile 'com.google.firebase:firebase-ads:10.2.1'
<string name="interstitial_full_screen">ca-app-pub-00000000/00000000</string>
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScree
android:theme="@android:style/Theme.Translucent" />
et
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
Activité:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
https://riptutorial.com/fr/home 77
// set the ad unit ID
mInterstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen));
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
showInterstitial();
}
});
}
https://riptutorial.com/fr/home 78
Chapitre 9: AIDL
Introduction
AIDL est un langage de définition d'interface Android.
Quelle? C'est un service limité. Ce service AIDL sera actif jusqu'à ce qu'au moins l'un des clients
existe. Il fonctionne sur la base du concept de marshaling et unmarshaling.
Pourquoi? Les applications distantes peuvent accéder à votre service + Multi Threading (demande
d’application distante).
Comment? Créez le fichier .aidl Implémentez l'interface Exposez l'interface aux clients
Examples
Service AIDL
ICalculator.aidl
interface ICalculator {
int add(int x,int y);
int sub(int x,int y);
}
AidlService.java
public AidlService() {
Log.i(TAG, className+" Constructor");
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
Log.i(TAG, className+" onBind");
return iCalculator.asBinder();
}
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, className+" onCreate");
https://riptutorial.com/fr/home 79
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, className+" onDestroy");
}
@Override
public int sub(int x, int y) throws RemoteException {
Log.i(TAG, className+" add Thread Name: "+Thread.currentThread().getName());
int z = x-y;
return z;
}
};
Connexion de service
@Override
public void onServiceDisconnected(ComponentName name) {
unbindService(serviceConnection);
}
};
https://riptutorial.com/fr/home 80
Chapitre 10: Ajout d'un FuseView à un projet
Android
Introduction
Exportez un Fuse.View depuis fusetools et utilisez-le dans un projet Android existant.
Notre objectif est d'exporter la totalité de l' application hikr et de l'utiliser dans une Activity .
Examples
hikr app, juste un autre android.view.View
Conditions préalables
Étape 1
{
"RootNamespace":"",
"Packages": [
"Fuse",
"FuseJS",
"Fuse.Views"
],
"Includes": [
"*",
"Modules/*.js:Bundle"
]
}
https://riptutorial.com/fr/home 81
Étape 3 : Créer le composant HikrApp pour conserver l'application entière
3.1 Dans le dossier racine du projet, créez un nouveau fichier appelé HikrApp.ux et collez le
contenu de MainView.ux .
HikrApp.ux
<App Background="#022328">
<iOS.StatusBarConfig Style="Light" />
<Android.StatusBarConfig Color="#022328" />
<ClientPanel>
<Navigator DefaultPath="splash">
<SplashPage ux:Template="splash" router="router" />
<HomePage ux:Template="home" router="router" />
<EditHikePage ux:Template="editHike" router="router" />
</Navigator>
</ClientPanel>
</App>
HikrApp.ux
<Navigator DefaultPath="splash">
<SplashPage ux:Template="splash" router="router" />
<HomePage ux:Template="home" router="router" />
<EditHikePage ux:Template="editHike" router="router" />
</Navigator>
</Page>
<App>
<HikrApp/>
</App>
Notre application est de retour à son comportement normal, mais nous l'avons maintenant extrait
d'un composant distinct appelé HikrApp
https://riptutorial.com/fr/home 82
Étape 4 Dans MainView.ux remplacez les balises <App> par <ExportedViews> et ajoutez
ux:Template="HikrAppView" à <HikrApp />
<ExportedViews>
<HikrApp ux:Template="HikrAppView" />
</ExportedViews>
Rappelez-vous le modèle HikrAppView , car nous en aurons besoin pour obtenir une référence à
notre vue depuis Java.
ExportedViews se comportera comme une App lors de la fuse preview normale des fuse
preview et lors de la uno build
Pas vrai. Vous obtiendrez cette erreur lors de la prévisualisation depuis Fuse Studio:
Erreur: Impossible de trouver une balise App dans l'un des fichiers UX inclus. Avez-
vous oublié d'inclure le fichier UX contenant la balise d'application?
<Page ux:Class="SplashPage">
<Router ux:Dependency="router" />
<GraphicsView>
<DockPanel ClipToBounds="true">
<Video Layer="Background" File="../Assets/nature.mp4" IsLooping="true"
AutoPlay="true" StretchMode="UniformToFill" Opacity="0.5">
<Blur Radius="4.75" />
</Video>
<Grid RowCount="2">
<StackPanel Alignment="VerticalCenter">
<hikr.Text Alignment="HorizontalCenter" FontSize="70">hikr</hikr.Text>
<hikr.Text Alignment="HorizontalCenter" Opacity=".5">get out
there</hikr.Text>
</StackPanel>
https://riptutorial.com/fr/home 83
</Page>
// Top-level build file where you can add configuration options common to all sub-
projects/modules.
buildscript { ... }
...
allprojects {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
}
...
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.shiftstudio.fuseviewtest"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
https://riptutorial.com/fr/home 84
}
dependencies {
compile(name: 'app-debug', ext: 'aar')
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
}
android:launchMode="singleTask"
android:taskAffinity=""
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize"
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:launchMode="singleTask"
android:taskAffinity=""
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</manifest>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
https://riptutorial.com/fr/home 85
setContentView(R.layout.activity_main);
activity_main.xml
<TextView
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="24sp"
android:textStyle="bold"
android:layout_height="wrap_content"
android:text="Hello World, from Kotlin" />
<FrameLayout
android:id="@+id/fuse_root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:text="THIS IS FROM NATIVE.\nBEHIND FUSE VIEW"
android:layout_gravity="center"
android:textStyle="bold"
android:textSize="30sp"
android:background="@color/colorAccent"
android:textAlignment="center"
android:layout_height="wrap_content" />
</FrameLayout>
</LinearLayout>
Remarque
Lorsque vous appuyez sur le bouton de retour, sur Android, l'application se bloque. Vous pouvez
suivre le problème sur le forum des fusibles .
https://riptutorial.com/fr/home 86
A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdeadcab1 in tid 18026
(io.fuseviewtest)
Et le résultat final est quelque chose comme ça. Vous pouvez également trouver un court clip sur
github .
https://riptutorial.com/fr/home 87
https://riptutorial.com/fr/home 88
https://riptutorial.com/fr/android/topic/10052/ajout-d-un-fuseview-a-un-projet-android
https://riptutorial.com/fr/home 89
Chapitre 11: AlarmManager
Examples
Exécuter une intention ultérieurement
1. Créez un récepteur. Cette classe recevra l'intention et la traitera comme vous le souhaitez.
2. Donnez une intention à AlarmManager. Cet exemple déclenchera l'intention d'être envoyé à
AlarmReceiver après 1 minute.
Si vous souhaitez annuler une alarme et que vous n'avez pas de référence au PendingIntent
d'origine utilisé pour définir l'alarme, vous devez recréer un PendingIntent exactement comme lors
de sa création initiale.
si leur action, données, type, classe et catégories sont les mêmes. Cela ne compare
aucune donnée supplémentaire incluse dans les intentions.
Le code de demande de chaque alarme est généralement défini comme une constante:
https://riptutorial.com/fr/home 90
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetTimeInMillis, pendingIntent);
Voici comment créer une nouvelle référence PendingIntent que vous pouvez utiliser pour annuler
l’alarme avec une nouvelle référence AlarmManager:
Avec de plus en plus d'optimisations de la batterie dans le système Android au fil du temps, les
méthodes du AlarmManager ont également considérablement changé (pour permettre une
synchronisation plus souple). Cependant, pour certaines applications, il doit toujours être aussi
précis que possible sur toutes les versions Android. L'assistant suivant utilise la méthode la plus
précise disponible sur toutes les plates-formes pour planifier un PendingIntent :
Android 6 (API23) a introduit le mode Doze qui interfère avec AlarmManager. Il utilise certaines
fenêtres de maintenance pour gérer les alarmes. Même si vous avez utilisé
setExactAndAllowWhileIdle() vous ne pouvez pas vous assurer que votre alarme se déclenche au
moment voulu.
Vous pouvez désactiver ce comportement pour votre application en utilisant les paramètres de
votre téléphone ( Settings/General/Battery & power saving/Battery usage/Ignore optimizations ou
similaire)
https://riptutorial.com/fr/home 91
}
https://riptutorial.com/fr/home 92
Chapitre 12: Amélioration des dialogues
d'alerte
Introduction
Cette rubrique concerne l'amélioration d'un AlertDialog avec des fonctionnalités supplémentaires.
Examples
Boîte de dialogue d'alerte contenant un lien cliquable
Pour afficher une boîte de dialogue contenant un lien pouvant être ouvert en cliquant dessus, vous
pouvez utiliser le code suivant:
builder1.setCancelable(false);
builder1.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
https://riptutorial.com/fr/home 93
Chapitre 13: Amélioration des performances
Android à l'aide des polices Icon
Remarques
Les polices d'icône sont comme les types de police normaux qui ont des symboles au lieu de
lettres. Il peut être utilisé dans votre application avec le plus de facilité.
Elles sont:
• Flexible
• Évolutive
• Vecteurs
• Processable Rapide
• Poids léger
• Accessible
L'exportation d'une image de différentes tailles pour des appareils Android coûterait à votre
application une taille d'actif supplémentaire d'environ 30 Ko par image. Tout en ajoutant un fichier
de polices (.ttf) avec environ 36 icônes, cela ne coûterait que 9 Ko. Imaginez le cas si vous
ajoutez 36 fichiers individuels de différentes configurations, ce serait environ 1000 Ko. C'est une
quantité raisonnable d'espace que vous économiserez en utilisant des polices d'icônes.
• Les polices d'icônes peuvent être utilisées dans le tiroir de navigation. Leur utilisation dans
les vues de navigation en tant qu'icône des éléments de menu n'est pas possible car le
fichier de menu ne peut pas être créé sans spécifier le titre. Il est donc conseillé d'utiliser les
fichiers svg comme ressources pour ces icônes.
• Les polices d'icône ne peuvent pas être utilisées dans un bouton d'action flottant. comme ils
n'ont pas d'attribut setText() .
• Les polices externes ne peuvent pas être appliquées à partir de XML. Ils doivent être
spécifiés en utilisant le fichier java. Ou bien vous devez étendre la vue de base et créer une
vue telle que spécifiée dans cet article.
Examples
Comment intégrer les polices Icon
Pour utiliser les polices d'icônes, suivez simplement les étapes ci-dessous:
https://riptutorial.com/fr/home 94
• Ajouter le fichier de police à votre projet
Vous pouvez créer votre fichier d'icône de police à partir de sites Web en ligne tels que
icomoon , où vous pouvez télécharger des fichiers SVG contenant les icônes requises, puis
télécharger la police d'icône créée. Ensuite, placez le fichier de police .ttf dans un dossier
nommé polices (nommez-le comme vous le souhaitez) dans le dossier assets:
Vous pouvez utiliser la classe Typeface pour sélectionner la police à partir des actifs. De cette
façon, vous pouvez définir la police sur différentes vues, par exemple sur un bouton:
Ouvrez le fichier styles.css attaché à la police d'icône. Vous y trouverez les styles avec les
caractères Unicode de vos icônes:
https://riptutorial.com/fr/home 95
.icon-arrow-circle-down:before {
content: “\e001”;
}
.icon-arrow-circle-left:before {
content: “\e002”;
}
.icon-arrow-circle-o-down:before {
content: “\e003”;
}
.icon-arrow-circle-o-left:before {
content: “\e004”;
}
<resources>
<! — Icon Fonts -->
<string name=”icon_arrow_circle_down”> </string>
<string name=”icon_arrow_circle_left”> </string>
<string name=”icon_arrow_circle-o_down”>&#x