1. 开始之前
简介
在本单元中,您学习了 WorkManager,这是一个用于延迟后台工作的 Jetpack 库。即使您关闭其源应用程序,此后台工作也能保证运行。
在学习 WorkManager 的过程中,您学习了如何在 Worker 类中定义工作,如何为 Worker 创建 WorkRequest,以及如何将工作入队和调度。
在本实践集中,您将运用所学的概念来增强**浇水吧!**应用。
解决方案代码位于末尾。为了充分利用这段学习体验,请尽量在查看提供的解决方案代码之前尝试实现和排查问题。在动手实践的过程中,您的学习效果最佳。
先决条件
- 完成高级 WorkManager 和测试 代码实验室中的 Android Compose 基础课程
您需要什么
- 一台连接互联网的电脑和 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
,并将输入数据设置为创建的data变量。 - 调用
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上查看。