1. 始める前に
この Codelab では、Water Me という、自分でビルドする新しいアプリを紹介します。また、Android Studio 内でのプロジェクトのセットアップやテストなど、Water Me アプリ プロジェクトを完了するための手順についても説明します。
前提条件
- このプロジェクトは、Kotlin コースの「Android の基本」のユニット 6 を完了している受講者を対象としています。
作成するアプリの概要
- 既存のアプリでカスタムの
Worker
を使用して通知をスケジュール設定します。
必要なもの
- Android Studio がインストールされているパソコン
2. 完成したアプリの概要
Water Me! アプリは、植物のリスト、その植物に関する情報、それぞれの水やり頻度についての説明で構成されています。完成したアプリは、それぞれの植物について、水やりをするタイミングに関するリマインダーをスケジュール設定します。
リマインダーは、Water Me! アプリが起動していなくても、デバイスに通知として表示されます。通知をタップすると Water Me! アプリが起動します。
この機能を動作させるには、通知を表示するカスタムの Worker
を使用してバックグラウンド タスクをスケジュール設定する必要があります。
3.始める
プロジェクト コードをダウンロードする
フォルダ名は android-basics-kotlin-water-me-app
です。Android Studio でプロジェクトを開くときは、このフォルダを選択してください。
この Codelab のコードを取得して Android Studio で開く手順は次のとおりです。
コードを取得する
- 指定された URL をクリックします。プロジェクトの 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 でプロジェクトが開くまで待ちます。
- 実行ボタン をクリックし、アプリをビルドして実行します。正常にビルドされたことを確認します。
- [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()
}
今回のタスクは、PlantViewModel
から正しいパラメータでこのメソッドを呼び出す OneTimeWorkRequest
を作成することです。
処理リクエストを作成する
通知をスケジュール設定するには、PlantViewModel.kt
に scheduleReminder()
メソッドを実装する必要があります。
Data.Builder
を使用してdata
という変数を作成します。data は単一の文字列値で構成され、WaterReminder.Worker.nameKey
がキーで、scheduleReminder()
に渡されるplantName
が値である必要があります。WaterReminderWorker
を使用して、1 回限りの処理リクエストを作成します。これには、scheduleReminder()
関数に渡されたdelay
とunit
を使用して、入力データを作成したdata
変数に設定します。workManager
のenqueueUniqueWork()
メソッドを呼び出して、植物名を渡し、REPLACE
をExistingWorkPolicy
として使用し、処理リクエストを行います。
これで、アプリは想定どおりに動作するはずです。各リマインダーが表示されるまでには時間が長くかかるため、付属のテストを実行して、通知が想定どおりに機能するか確認することをおすすめします。
5. テスト手順
テストを実行する
テストを実行するには、次のいずれかを行います。
1 つのテストケースの場合、テストケース クラスを開き、クラス宣言の左側にある緑色の矢印をクリックします。メニューから [Run] オプションを選択します。これにより、テストケース内のすべてのテストが実行されます。
多くの場合、1 つのテストを実行するだけで済みます。たとえば、失敗したテストが 1 つしかなく、他のテストには合格している場合などです。テストケース全体を実行するときと同じように、1 つのテストを実行できます。緑色の矢印をクリックして [Run] オプションを選択します。