1. 准备工作
简介
在本单元中,您已学习了 WorkManager 的相关知识,它是一个适用于可延迟型后台工作的 Jetpack 库。即使您关闭了源应用,这类后台工作也一定会运行。
在学习 WorkManager 的过程中,您学习了如何在 worker 类中定义工作、如何为 worker 创建 WorkRequest,以及如何将工作加入队列和调度工作。
在本练习集内,您将运用所学的概念来完善 Water Me! 应用。
解决方案代码就在文末。为了充分发挥此学习体验的效果,请尝试尽量自行进行实现和问题排查,之后再查看所提供的解决方案代码。只有亲自动手实践,才能获得最好的学习效果。
前提条件
- 通过高级 WorkManager 和测试 Codelab 完成“Android 之 Compose 开发基础”课程作业
所需条件
- 一台连接到互联网并安装了 Android Studio 的计算机
构建内容
在本练习集内,您将运用所学的概念来完善 Water Me! 应用。
该应用目前在滚动式列表中显示了一系列植物。如果您点按某种植物,该应用就会让您为它设置浇水提醒。
虽然您可以选择提醒时间范围,但系统不会显示提醒通知。
您的任务是实现后台工作,使系统显示提醒通知。
您完成代码后,该应用就会在选定的时长过后显示提醒通知。
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 代码库中浏览 Water Me! 应用的代码。
运行起始代码
若要熟悉起始代码,请完成以下步骤:
- 在 Android Studio 中打开包含起始代码的项目。
- 在 Android 设备或模拟器上运行该应用。
现在,您可以开始编码了!
3. 使用 WorkManager 调度通知
除了调度提醒通知之外,Water Me! 应用的大部分功能都已经实现了。
用于发送通知的代码位于 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()
}
您的任务是创建一个 OneTimeWorkRequest
,以便使用 WorkManagerWaterRepository
中的正确参数调用此方法。
如需更多帮助,请参阅使用 WorkManager 处理后台工作。
创建工作请求
若要调度通知,您需在 WorkManagerWaterRepository.kt
文件中实现 scheduleReminder()
方法。
- 使用
Data.Builder
创建一个名为data
的变量。data 需要由单个字符串值组成,其中WaterReminderWorker.nameKey
是键,而传入scheduleReminder()
的plantName
是值。 - 使用
WaterReminderWorker
类创建一次性工作请求。使用传入scheduleReminder()
函数的duration
和unit
将输入数据设为您创建的数据变量。 - 调用
workManager
的enqueueUniqueWork()
方法。传入与时长串联的植物名称,使用REPLACE
作为ExistingWorkPolicy
,并使用相应的工作请求对象。
现在,您的应用应该能按预期运行了。
4. 额外挑战(可选)
如需进行更多编码练习,请将时长选项改为:
- 5 秒
- 1 分钟
- 2 分钟
- 3 分钟
完成后,请测试每个时长,确认其能否按预期运行。
5. 获取解决方案代码
如需下载完成后的 Codelab 代码,可以使用以下命令:
$ 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 中打开。
如果您想查看此 Codelab 的解决方案代码,请前往 GitHub。