1. 开始之前
简介
在本单元中,您学习了 WorkManager,这是一个用于可延迟后台工作的 Jetpack 库。即使关闭其源应用,也能保证此后台工作运行。
在学习 WorkManager 时,您学习了如何在 Worker 类中定义工作、如何为 Worker 创建 WorkRequest,以及如何将工作加入队列并安排工作。
在此实践集中,您将运用所学概念并改进 浇水啦! 应用。
解决方案代码在结尾提供。为了充分利用本次学习体验,请尽量在查看提供的解决方案代码之前自行实现和解决问题。动手实践是学习效率最高的方式。
前提条件
- 已通过《使用 Compose 的 Android 基础知识》课程中的 高级 WorkManager 和测试 Codelab
准备事项
- 一台可连接互联网的计算机和 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 安排通知
浇水啦! 应用的大部分功能已实现,除了安排提醒通知的功能。
创建通知的代码位于 worker 软件包中的 WaterReminderWorker.kt
文件中。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
的变量。该数据需要包含一个字符串值,其中WaterReminderWorker.nameKey
是键,传递给scheduleReminder()
的plantName
是值。 - 使用
WaterReminderWorker
类创建一个一次性工作请求。使用传递给scheduleReminder()
函数的duration
和unit
,并将输入数据设置为您创建的data
变量。 - 调用
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 上查看。