練習:Water Me! 應用程式

1. 事前準備

簡介

您已在這個單元中認識 WorkManager,這個 Jetpack 程式庫適用可延後執行的背景工作。即使您關閉來源應用程式,這項背景工作也一定會執行。

在瞭解 WorkManager 的過程中,您已學會如何在 Worker 類別中定義工作、如何為 Worker 建立 WorkRequest,以及如何將工作排入佇列和排程。

在本練習中,您將運用學到的概念,並強化 Water Me! 應用程式的功能。

您可以在練習結尾處找到解決方案程式碼,但為了讓本練習發揮最大效益,建議您先盡可能嘗試實作和疑難排解,再查看我們提供的解決方案程式碼。藉由實際操作,您能夠學到最多的知識。

必要條件

軟硬體需求

  • 電腦可以連上網際網路並已安裝 Android Studio

建構項目

在本練習中,您將運用學到的概念,並強化 Water Me! 應用程式的功能。

這個應用程式目前會在捲動清單中顯示植物清單。當您輕觸植物時,應用程式會讓您設定澆水提醒。

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 存放區中瀏覽 Water Me! 應用程式的程式碼。

執行範例程式碼

若要瞭解範例程式碼,請完成下列步驟:

  1. 在 Android Studio 中開啟含有範例程式碼的專案。
  2. 在 Android 裝置或模擬器上執行應用程式。

您現在可以開始寫程式了!

3. 使用 WorkManager 安排通知

除了排定提醒通知的功能以外,「Water Me!」應用程式的功能多半都已完成實作。

用於發出通知的程式碼位於「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() 函式的 duration 和 unit,並將輸入資料設為您建立的資料變數。
  3. 呼叫 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。