練習: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() 函式的 durationunit,並將輸入資料設為您建立的資料變數。
  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