1. 事前準備
簡介
您已在這個單元中認識 WorkManager,這個 Jetpack 程式庫適用可延後執行的背景工作。即使您關閉來源應用程式,這項背景工作也一定會執行。
在瞭解 WorkManager 的過程中,您已學會如何在 Worker 類別中定義工作、如何為 Worker 建立 WorkRequest,以及如何將工作排入佇列和排程。
在本練習中,您將運用學到的概念,並強化 Water Me! 應用程式的功能。
您可以在練習結尾處找到解決方案程式碼,但為了讓本練習發揮最大效益,建議您先盡可能嘗試實作和疑難排解,再查看我們提供的解決方案程式碼。藉由實際操作,您能夠學到最多的知識。
必要條件
- 具備 Android 基本概念並熟悉 Compose 課程中的「進階 WorkManager 和測試」程式碼研究室
軟硬體需求
- 電腦可以連上網際網路並已安裝 Android Studio
建構項目
在本練習中,您將運用學到的概念,並強化 Water Me! 應用程式的功能。
這個應用程式目前會在捲動清單中顯示植物清單。當您輕觸植物時,應用程式會讓您設定澆水提醒。
雖然您可以選取提醒的時間範圍,但應用程式不會顯示提醒通知。
您的工作是實作背景工作,讓提醒通知能夠顯示。
在您完成程式碼設計後,應用程式就能在所選時間長度過後顯示提醒通知。
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! 應用程式的程式碼。
執行範例程式碼
若要瞭解範例程式碼,請完成下列步驟:
- 在 Android Studio 中開啟含有範例程式碼的專案。
- 在 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()
方法。
- 使用
Data.Builder
建立名為data
的變數。資料必須包含單一字串值,其中WaterReminderWorker.nameKey
是鍵,而傳入至scheduleReminder()
的plantName
為值。 - 使用
WaterReminderWorker
類別建立一次性工作要求。使用傳入scheduleReminder()
函式的duration
和unit
,並將輸入資料設為您建立的資料變數。 - 呼叫
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。