Android開発のリハビリのためAndroid Codelabをちょっとやってみたので、個人的なメモを残しておく。
対象のcodelab
Advanced Android in Kotlin 01.1: Using Android Notifications
ここで学べること
- 通知を作成、スタイル設定、送信する方法
- 通知をキャンセルする方法
- 通知チャンネルを作成する方法
- 通知にクイックアクションを追加する方法
- アプリアイコンに通知バッジを表示する方法
とりあえず起動
とりあえずPullして起動するとこんな感じに、普通のToastを表示するだけのタイマー。
通知チャンネルの追加
APIレベル26以降では、すべての通知をチャンネルに割り当てる必要がある
enableLights=true
で通知が表示されたときにライトが有効になるlightColorでカラーの設定も可能
enableVibrationで振動を可能にする
通知チャンネルの重要度レベル
重要度(Android 8.0以降) | 音 | ヘッドアップ通知 | ステータスバー |
---|---|---|---|
IMPORTANCE_HIGH | あり | あり | あり |
IMPORTANCE_DEFAULT | あり | なし | あり |
IMPORTANCE_LOW | なし | なし | あり |
IMPORTANCE_MIN | なし | なし | なし |
- ヘッドアップ通知: 画面の上部にポップアップする
IMPORTANCE_MIN
はステータスバーを引っ張って一覧表示しないと出てこない
通知の表示
NotificationCompatに必要なことは全部ある感じ。以下、コード抜粋。
val builder = NotificationCompat.Builder(applicationContext,
applicationContext.getString(R.string.egg_notification_channel_id))
.setContentIntent(contentPendingIntent) // 通知をタップしたときにアプリに遷移する設定
.setAutoCancel(true) // 通知をタップしてアプリに移動するときに通知が消える設定
val eggImage = BitmapFactory.decodeResource(applicationContext.resources, R.drawable.cooked_egg)
// 通知を広げたときの大きい表示設定
val bigPicture = NotificationCompat.BigPictureStyle().bigPicture(eggImage).bigLargeIcon(null)
...
builder.setStyle(bigPicture)
.setLargeIcon(eggImage)
通知の表示 | 通知を広げたときの表示 | アプリアイコンのバッチ |
---|---|---|
- デフォルトで通知バッチがでるので、
setShowBadge(false)
で通知バッチを無効にできる
まとめ
- NotificationManagerクラスを使用して、通知の作成、送信、更新、キャンセルを行う
- 通知のチャンネルを設定するには、createNotificationChannelメソッドでNotificationChannelオブジェクトを作成する
- BuilderでaddAction()を使用して、通知にクイックアクションを追加する
- Notification.Styleから拡張されたスタイルを使用して通知に設定できる
- NotificationChannel.setImportance()で通知レベルの重要度を設定する