1. Antes de comenzar
En este codelab, se presenta una nueva app llamada Water Me! que compilarás por tu cuenta. En él, seguirás los pasos necesarios para completar el proyecto de la app de Water Me!, incluidas la configuración del proyecto y las pruebas en Android Studio.
Requisitos previos
- Este proyecto está destinado a los alumnos que completaron la Unidad 6 del curso de Aspectos básicos de Android en Kotlin.
Qué compilarás
- Programarás una notificación con un
Worker
personalizado en una app existente.
Requisitos
- Una computadora que tenga Android Studio instalado
2. Descripción general de la app finalizada
La app de Water Me! consiste en una lista de plantas, información sobre ellas y una descripción sobre la frecuencia con que debes regar cada una. En la app finalizada, cada una de estas plantas tendrá un recordatorio programado para cuando sea necesario regarlas.
Los recordatorios se mostrarán como notificaciones en el dispositivo, incluso si la app de Water Me! no se está ejecutando. Si presionas una notificación, la app se abrirá.
A fin de que se ejecute esta función, debes programar una tarea en segundo plano con un Worker
personalizado que muestre la notificación.
3. Cómo comenzar
Descarga el código del proyecto
Ten en cuenta que el nombre de la carpeta es android-basics-kotlin-water-me-app
. Selecciona esta carpeta cuando abras el proyecto en Android Studio.
Para obtener el código necesario para este codelab y abrirlo en Android Studio, haz lo siguiente:
Obtén el código
- Haz clic en la URL proporcionada. Se abrirá la página de GitHub del proyecto en un navegador.
- En esa página, haz clic en el botón Code, que abre un cuadro de diálogo.
- En el cuadro de diálogo, haz clic en el botón Download ZIP para guardar el proyecto en tu computadora. Espera a que se complete la descarga.
- Ubica el archivo en tu computadora (probablemente en la carpeta Descargas).
- Haz doble clic en el archivo ZIP para descomprimirlo. Se creará una carpeta nueva con los archivos del proyecto.
Abre el proyecto en Android Studio
- Inicia Android Studio.
- En la ventana Welcome to Android Studio, haz clic en Open an existing Android Studio project.
Nota: Si Android Studio ya está abierto, selecciona la opción de menú File > New > Import Project.
- En el cuadro de diálogo Import Project, navega hasta donde se encuentra la carpeta de proyecto descomprimido (probablemente en Descargas).
- Haz doble clic en la carpeta del proyecto.
- Espera a que Android Studio abra el proyecto.
- Haz clic en el botón Run para compilar y ejecutar la app. Asegúrate de que funcione como se espera.
- Explora los archivos del proyecto en la ventana de herramientas Project para ver cómo se configuró la app.
4. Programa notificaciones con WorkManager
Todas las funcionalidades de la app de Water Me! ya están implementadas, excepto por la parte de crear un programa y una notificación. El código para mostrar una notificación está en WaterReminderWorker.kt
(en el paquete worker). Esto sucede en el método doWork()
de una clase Worker
personalizada. Como las notificaciones pueden ser un tema nuevo, este código ya está implementado.
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()
}
Tu tarea es crear un OneTimeWorkRequest
que llamará a este método con los parámetros correctos de PlantViewModel
.
Crea solicitudes de trabajo.
Para programar la notificación, deberás implementar el método scheduleReminder()
en PlantViewModel.kt
.
- Crea una variable llamada
data
conData.Builder
. Los datos deben consistir en un solo valor de string, en el que el elementoWaterReminder.Worker.nameKey
es la clave y el elementoplantName
que se pasó ascheduleReminder()
es el valor. - Crea una solicitud de trabajo de una sola ejecución con
WaterReminderWorker
, usadelay
yunit
pasados a la funciónscheduleReminder()
, y configura los datos de entrada en la variabledata
que creaste. - Llama al método
enqueueUniqueWork()
deworkManager
y pasa el nombre de la planta conREPLACE
comoExistingWorkPolicy
, y la solicitud de trabajo.
Ahora, tu app debería funcionar según lo esperado. Debido a que cada recordatorio tardará mucho en aparecer, te recomendamos ejecutar las pruebas incluidas a fin de verificar que la notificación funcione como debería.
5. Instrucciones para pruebas
Cómo realizar las pruebas
Para ejecutar las pruebas, puedes realizar una de las siguientes acciones:
Si se trata de un solo caso de prueba, abre una clase de caso de prueba y haz clic en la flecha verde que está a la izquierda de la declaración de la clase. Luego, puedes seleccionar la opción Run en el menú. Se ejecutarán todas las pruebas del caso de prueba.
Lo más probable es que quieras ejecutar una sola prueba, por ejemplo, si hay una sola prueba fallida y las otras aprueban. Puedes ejecutar una sola prueba como lo harías con todo el caso de prueba. Usa la flecha verde y selecciona la opción Run.