1. 在您开始之前
简介
在本单元中,您学习了 WorkManager,这是一个用于可延迟后台工作的 Jetpack 库。即使您关闭其源应用程序,此后台工作也保证会运行。
在学习 WorkManager 的过程中,您学习了如何在 Worker 类中定义工作,如何为 Worker 创建 WorkRequest,以及如何入队和安排工作。
在本实践集中,您将运用所学概念并增强**浇花!**应用。
解决方案代码位于末尾。为了充分利用此学习体验,请尝试在查看提供的解决方案代码之前尽可能多地实现和排除故障。正是在这段动手时间里,您学到了最多。
先决条件
- 通过 高级 WorkManager 和测试 代码实验室学习 Compose 课程的 Android 基础知识
您需要什么
- 一台有互联网连接的电脑和 Android Studio
您将构建什么
在本实践集中,您将运用所学概念并增强**浇花!**应用。
该应用目前在一个滚动列表中显示植物列表。当您点击植物时,该应用允许您设置浇水提醒。
虽然您可以选择提醒时间范围,但提醒通知不会显示。
您的工作是实现提醒通知显示的后台工作。
完成代码后,应用即可在选定的时间段过去后显示提醒通知。
2. 获取启动代码
要开始,请下载启动代码
或者,您可以克隆代码的 GitHub 存储库
$ git clone https://github.com/google-developer-training/basic-android-kotlin-compose-training-waterme.git $ cd basic-android-kotlin-compose-training-waterme $ git checkout starter
您可以在此 GitHub 存储库中浏览**浇花!**应用的代码。
运行启动代码
要熟悉启动代码,请完成以下步骤
- 在 Android Studio 中打开包含启动代码的项目。
- 在 Android 设备或模拟器上运行应用。
您现在可以开始编码了!
3. 使用 WorkManager 安排通知
**浇花!**应用的大部分功能都已实现,除了安排提醒通知的功能。
创建通知的代码位于 WaterReminderWorker.kt
文件中,该文件位于**worker** 包中。 WaterReminderWorker
类扩展了 CoroutineWorker
类,创建通知的代码位于其 doWork()
方法中。
由于通知可能对您来说是一个新主题,因此此代码已完成。
override suspend fun doWork(): Result {
val plantName = inputData.getString(nameKey)
makePlantReminderNotification(
applicationContext.resources.getString(R.string.time_to_water, plantName),
applicationContext
)
return Result.success()
}
您的任务是从 WorkManagerWaterRepository
创建一个 OneTimeWorkRequest
,并使用正确的参数调用此方法。
如需更多帮助,请参阅 使用 WorkManager 进行后台工作。
创建工作请求
要安排通知,您需要在 WorkManagerWaterRepository.kt
文件中实现 scheduleReminder()
方法。
- 使用
Data.Builder
创建一个名为data
的变量。数据需要包含一个字符串值,其中WaterReminderWorker.nameKey
是键,传递给scheduleReminder()
的plantName
是值。 - 使用
WaterReminderWorker
类创建一个一次性工作请求。使用传递给scheduleReminder()
函数的duration
和unit
,并将输入数据设置为创建的数据变量。 - 调用
workManager
的enqueueUniqueWork()
方法。传入植物名称与持续时间的串联,使用REPLACE
作为ExistingWorkPolicy
,以及工作请求对象。
您的应用现在应该可以按预期工作了。
4. 附加挑战(可选)
为了进行额外的编码练习,请将时间持续时间选项更改为以下内容
- 5 秒
- 1 分钟
- 2 分钟
- 3 分钟
完成后,测试每个持续时间以确认其按预期工作。
5. 获取解决方案代码
要下载完成的代码实验室的代码,您可以使用以下命令
$ git clone https://github.com/google-developer-training/basic-android-kotlin-compose-training-waterme.git $ cd basic-android-kotlin-compose-training-waterme $ git checkout main
或者,您可以将存储库下载为 zip 文件,解压缩它,然后在 Android Studio 中打开它。
如果您想查看此代码实验室的解决方案代码,请在 GitHub 上查看。