实践:浇水啦!应用

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 安排通知

浇水啦! 应用的大部分功能已实现,除了安排提醒通知的功能。

创建通知的代码位于 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() 方法。

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