1. Avant de commencer
Cet atelier de programmation présente une nouvelle application appelée Water Me, que vous allez créer vous-même. Il explique les différentes étapes à suivre pour mener à bien ce projet d'application, y compris sa configuration et ses tests dans Android Studio.
Conditions préalables
- Ce projet est destiné aux élèves qui ont terminé le module 6 du cours sur les principes de base d'Android en Kotlin.
Objectifs de l'atelier
- Programmer une notification à l'aide d'un
Worker
personnalisé dans une application existante
Ce dont vous avez besoin
- Un ordinateur sur lequel est installé Android Studio
2. Présentation de l'application terminée
L'application Water Me! comporte une liste de plantes, quelques informations les concernant ainsi qu'une indication sur leur fréquence d'arrosage. L'application terminée programmera un rappel pour savoir quand arroser chaque plante.
Les rappels s'afficheront sous forme de notifications sur l'appareil, même si l'application Water Me! n'est pas en cours d'exécution. Celle-ci se lancera lorsque l'utilisateur appuiera sur une notification.
Pour que cette option fonctionne, votre tâche consiste à planifier une tâche en arrière-plan à l'aide d'un Worker
personnalisé qui affichera la notification.
3. Premiers pas
Télécharger le code du projet
Notez que le nom du dossier est android-basics-kotlin-water-me-app
. Sélectionnez ce dossier lorsque vous ouvrez le projet dans Android Studio.
Pour obtenir le code de cet atelier de programmation et l'ouvrir dans Android Studio, procédez comme suit :
Obtenir le code
- Cliquez sur l'URL indiquée. La page GitHub du projet s'ouvre dans un navigateur.
- Sur la page GitHub du projet, cliquez sur le bouton Code pour afficher une boîte de dialogue.
- Dans la boîte de dialogue, cliquez sur le bouton Download ZIP (Télécharger le fichier ZIP) pour enregistrer le projet sur votre ordinateur. Attendez la fin du téléchargement.
- Recherchez le fichier sur votre ordinateur (il se trouve probablement dans le dossier Téléchargements).
- Double-cliquez sur le fichier ZIP pour le décompresser. Un dossier contenant les fichiers du projet est alors créé.
Ouvrir le projet dans Android Studio
- Lancez Android Studio.
- Dans la fenêtre Welcome to Android Studio (Bienvenue dans Android Studio), cliquez sur Open an existing Android Studio project (Ouvrir un projet Android Studio existant).
Remarque : Si Android Studio est déjà ouvert, sélectionnez l'option de menu File > New > Import Project (Fichier > Nouveau > Importer un projet).
- Dans la boîte de dialogue Import Project (Importer un projet), accédez à l'emplacement du dossier du projet décompressé. Il se trouve probablement dans le dossier Téléchargements.
- Double-cliquez sur le dossier de ce projet.
- Attendez qu'Android Studio ouvre le projet.
- Cliquez sur le bouton Run (Exécuter) pour créer et exécuter l'application. Assurez-vous qu'elle se crée correctement.
- Parcourez les fichiers du projet dans la fenêtre de l'outil Projet pour voir comment l'application est configurée.
4. Programmer une notification avec WorkManager
Toutes les fonctionnalités de l'application Water Me! sont déjà implémentées, à l'exception de la partie consistant à programmer une notification. Le code permettant d'afficher une notification se trouve dans WaterReminderWorker.kt
(dans le package worker). Cela se produit dans la méthode doWork()
d'une classe Worker
personnalisée. Étant donné que les notifications sont peut-être un sujet que vous ne maîtrisez pas encore, ce code est déjà implémenté.
override fun doWork(): Result {
val intent = Intent(applicationContext, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val pendingIntent: PendingIntent = PendingIntent
.getActivity(applicationContext, 0, intent, 0)
val plantName = inputData.getString(nameKey)
val builder = NotificationCompat.Builder(applicationContext, BaseApplication.CHANNEL_ID)
.setSmallIcon(R.drawable.ic_android_black_24dp)
.setContentTitle("Water me!")
.setContentText("It's time to water your $plantName")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
with(NotificationManagerCompat.from(applicationContext)) {
notify(notificationId, builder.build())
}
return Result.success()
}
Votre tâche consiste à créer un élément OneTimeWorkRequest
qui appellera cette méthode avec les paramètres corrects à partir de PlantViewModel
.
Créer des demandes de tâche
Pour programmer la notification, vous devez implémenter la méthode scheduleReminder()
dans PlantViewModel.kt
.
- Créez une variable appelée
data
à l'aide deData.Builder
. Les données doivent correspondre à une seule valeur de chaîne, oùWaterReminder.Worker.nameKey
est la clé et oùplantName
est transmis àscheduleReminder()
comme valeur. - Créez une demande de tâche unique à l'aide de
WaterReminderWorker
, en utilisant les valeursdelay
etunit
transmises à la fonctionscheduleReminder()
, et en définissant les données d'entrée sur la variabledata
que vous avez créée. - Appelez la méthode
enqueueUniqueWork()
deworkManager
en transmettant le nom de la plante, en utilisantREPLACE
commeExistingWorkPolicy
, et la demande de tâche.
Votre application devrait maintenant fonctionner comme prévu. Étant donné que l'affichage de chaque rappel prend beaucoup de temps, nous vous recommandons d'exécuter les tests fournis pour vérifier que la notification fonctionne comme prévu.
5. Instructions de test
Exécuter vos tests
Pour exécuter les tests, vous pouvez effectuer l'une des opérations suivantes.
Pour un scénario de test unique, ouvrez une classe de scénario de test et cliquez sur la flèche verte à gauche de la déclaration de classe. Vous pouvez ensuite sélectionner l'option "Run" (Exécuter) dans le menu. Tous les tests seront exécutés dans le scénario de test.
Souvent, vous ne souhaiterez exécuter qu'un seul test, par exemple lorsqu'un test a échoué et que tous les autres ont réussi. Il est possible d'exécuter un seul test de la même manière que vous le feriez pour un scénario de test complet. Utilisez la flèche verte et sélectionnez l'option Exécuter.