1. 事前準備
本程式碼研究室將說明如何自行建構一款名為「Water Me」的新應用程式。本程式碼研究室將引導您逐步完成 Water Me 應用程式專案,包括在 Android Studio 中設定和測試專案。
必要條件
- 此專案適用於已完成 Android Kotlin 基本概念課程單元 6 的學員。
建構項目
- 在現有應用程式中使用自訂
Worker
安排通知。
軟硬體需求
- 已安裝 Android Studio 的電腦。
2. 已完成應用程式總覽
Water Me! 應用程式包含植物清單、植物相關資訊,以及各種植物的正常澆水頻率說明。完成設定的應用程式將可針對不同的植物安排澆水提醒。
即使未運作 Water Me! 應用程式,裝置上仍會以通知形式顯示提醒。只要輕觸通知,即可啟動 Water Me! 應用程式。
如要使用這項功能,您必須使用顯示通知的自訂 Worker
來安排背景工作。
3. 開始操作
下載專案程式碼
請注意,資料夾名稱是 android-basics-kotlin-water-me-app
。在 Android Studio 中開啟專案時,請選取這個資料夾。
如要取得這個程式碼研究室的程式碼,並在 Android Studio 中開啟,請按照下列步驟操作:
取得程式碼
- 按一下上面顯示的網址。系統會在瀏覽器中開啟專案的 GitHub 頁面。
- 在專案的 GitHub 頁面中,按一下「Code」按鈕開啟對話方塊。
- 在對話方塊中,按一下「Download ZIP」按鈕,將專案儲存到電腦。等待下載作業完成。
- 在電腦中找到該檔案 (可能位於「下載」資料夾中)。
- 按兩下解壓縮 ZIP 檔案。這項操作會建立含有專案檔案的新資料夾。
在 Android Studio 中開啟專案
- 啟動 Android Studio。
- 在「Welcome to Android Studio」視窗中,按一下「Open an existing Android Studio project」。
注意:如果 Android Studio 已開啟,請依序選取「File」>「New」>「Import Project」選單選項。
- 在「Import Project」對話方塊中,前往解壓縮專案資料夾所在的位置 (可能位於「下載」資料夾中)。
- 按兩下該專案資料夾。
- 等待 Android Studio 開啟專案。
- 按一下「Run」按鈕 即可建構並執行應用程式。請確認應用程式的建構符合預期。
- 在「Project」 工具視窗中瀏覽專案檔案,查看應用程式的設定方式。
4. 使用 WorkManager 安排通知
除安排時間與通知部分外,已實作 Water Me! 應用程式的所有功能。顯示通知的程式碼位於 WaterReminderWorker.kt
(位於 worker 套件中)。這項操作將會在自訂 Worker
類別的 doWork()
方法中執行。由於通知可能是新主題,因此已實作程式碼。
override fun doWork(): Result {
val intent = Intent(applicationContext, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val pendingIntent: PendingIntent = PendingIntent
.getActivity(applicationContext, 0, intent, 0)
val plantName = inputData.getString(nameKey)
val builder = NotificationCompat.Builder(applicationContext, BaseApplication.CHANNEL_ID)
.setSmallIcon(R.drawable.ic_android_black_24dp)
.setContentTitle("Water me!")
.setContentText("It's time to water your $plantName")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
with(NotificationManagerCompat.from(applicationContext)) {
notify(notificationId, builder.build())
}
return Result.success()
}
您的工作是建立 OneTimeWorkRequest
,以使用 PlantViewModel
的正確參數呼叫此方法。
建立工作要求。
如要安排通知,您必須在 PlantViewModel.kt
中實作 scheduleReminder()
方法。
- 使用
Data.Builder
建立名稱為data
的變數。資料應包含單一字串值,其中WaterReminder.Worker.nameKey
是鍵,而傳入至scheduleReminder()
的plantName
為值。 - 使用
WaterReminderWorker
及傳入scheduleReminder()
函式的delay
和unit
建立一次性工作要求,並將輸入資料設為您建立的data
變數。 - 呼叫
workManager
的enqueueUniqueWork()
方法,將REPLACE
做為ExistingWorkPolicy
傳入植物名稱,以及工作要求。
您的應用程式現在應可正常運作。由於每個提醒需要較長的時間顯示,因此建議您執行隨附的測試,確認通知是否正常運作。
5. 測試操作說明
執行測試
如要執行測試,請執行下列其中一項操作:
若是單一測試案例,請開啟測試案例類別,然後按一下類別宣告左側的綠色箭頭。接著從選單中選取「Run」選項。這麼做將會執行測試案例中的所有測試。
您通常只需要執行一項測試,例如只有一個測試失敗,另一個則通過測試。執行單一測試的做法,與執行整個測試案例一樣。使用綠色箭頭並選取「Run」選項。