1. 始める前に
はじめに
このユニットでは、遅延可能なバックグラウンド処理用の Jetpack ライブラリである WorkManager について学習しました。このバックグラウンド処理は、ソースアプリを閉じても必ず実行されます。
WorkManager について学習しながら、Worker クラスで処理を定義する方法、Worker の WorkRequest を作成する方法、処理をキューに登録してスケジュール設定する方法を学びました。
この演習セットでは、学習したコンセプトを活用して Water Me! アプリを拡張します。
解答コードは最後にあります。この学習体験を最大限に活用するため、記載された解答コードを確認する前に、できる限りご自身で実装とトラブルシューティングを行ってみてください。この実践時間中に、多くのことを学びましょう。
前提条件
- 高度な WorkManager とテスト Codelab の「Compose を用いた Android アプリ開発の基礎」コースワークを完了していること。
必要なもの
- 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
Water Me! アプリのコードは、こちらの GitHub リポジトリで確認できます。
スターター コードを実行する
次の手順でスターター コードを確認し、よく理解してください。
- 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()
}
ここでのタスクは、WorkManagerWaterRepository
から正しいパラメータでこのメソッドを呼び出す OneTimeWorkRequest
を作成することです。
詳しくは、WorkManager によるバックグラウンド処理をご覧ください。
処理リクエストを作成する
通知のスケジュール設定を行うには、WorkManagerWaterRepository.kt
ファイルに scheduleReminder()
メソッドを実装する必要があります。
Data.Builder
を使用して、data
という変数を作成します。データは単一の文字列値(WaterReminderWorker.nameKey
がキーで、scheduleReminder()
に渡されるplantName
が値)で構成する必要があります。WaterReminderWorker
クラスを使用して 1 回限りの処理リクエストを作成します。scheduleReminder()
関数に渡されたduration
とunit
を使用して、作成するデータ変数に入力データを設定します。workManager
のenqueueUniqueWork()
メソッドを呼び出します。植物名に経過時間を連結して渡し、ExistingWorkPolicy
および処理リクエスト オブジェクトとしてREPLACE
を使用します。
これで、アプリは想定どおりに動作するはずです。
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 で表示します。