实践:浇水吧!应用

1. 开始之前

简介

在本单元中,您学习了 WorkManager,这是一个用于延迟后台工作的 Jetpack 库。即使您关闭其源应用程序,此后台工作也能保证运行。

在学习 WorkManager 的过程中,您学习了如何在 Worker 类中定义工作,如何为 Worker 创建 WorkRequest,以及如何将工作入队和调度。

在本实践集中,您将运用所学的概念来增强**浇水吧!**应用。

解决方案代码位于末尾。为了充分利用这段学习体验,请尽量在查看提供的解决方案代码之前尝试实现和排查问题。在动手实践的过程中,您的学习效果最佳。

先决条件

您需要什么

  • 一台连接互联网的电脑和 Android Studio

您将构建什么

在本实践集中,您将运用所学的概念来增强**浇水吧!**应用。

该应用目前在一个滚动列表中显示植物列表。点击植物时,应用允许您设置浇水提醒。

fb69d6519999f217.png d6b68d1e9f1026c5.png

虽然您可以选择提醒时间范围,但提醒通知不会显示。

您的任务是实现显示提醒通知的后台工作。

完成代码后,应用就可以在选定的时间段过后显示提醒通知。

a8f9bceed83af5a9.png

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 仓库中浏览**浇水吧!**应用的代码。

运行启动代码

要熟悉启动代码,请完成以下步骤

  1. 在 Android Studio 中打开包含启动代码的项目。
  2. 在 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()方法。

  1. 使用Data.Builder创建一个名为data的变量。数据需要包含一个单个字符串值,其中WaterReminderWorker.nameKey是键,传递到scheduleReminder()plantName是值。
  2. 使用WaterReminderWorker类创建一个一次性工作请求。使用传递到scheduleReminder()函数的durationunit,并将输入数据设置为创建的data变量。
  3. 调用workManagerenqueueUniqueWork()方法。传入植物名称与持续时间的组合,使用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上查看。