みなさまこんにちは〜!
メモリアインクのすだです。
本日は、
KotlinのNotificationCompatを使って指定のタイミングでデバイスに通知を表示する方法を
実際のコードを利用して徹底解説していきます!
この記事を読んでわかること…
・NotificationCompatとは?
・NotificationCompatの通知表示の実装方法
・通知内のボタンをタップして特定の画面へ遷移する方法
環境
- Kotlin (ver 1.9.0)
- Android Studio (Giraffe | 2022.3.1 Patch 3)
NotificationCompatとは?
NotificationCompat
は、Androidアプリで通知を作成・管理するためのクラスです。
Android Support Library(現在のAndroidX)の一部で、異なるAPIレベル間で互換性を確保しながら通知を作成できます。
- 後方互換性: 古いAndroidバージョンでも通知を作成可能。
- 簡単なAPI: 複雑な通知も簡単に作成できる。
- 豊富な機能: アクションボタンやカスタムレイアウトなど多機能。
通知を使うシーンとしては、主に以下のような例を挙げることができます。
- リアルタイム通知:
- メッセージアプリで新しいメッセージの受信を通知。
- SNSアプリで友達のアクション(例: いいね、コメント)を通知。
- リマインダーやアラート:
- カレンダーアプリで予定のリマインダー。
- アラームアプリでの通知。
- バックグラウンドタスクの進行状況:
- ファイルダウンロード中の進捗状況を通知。
- バックグラウンドでのデータ同期の完了を通知。
- ユーザー誘導:
- 特別なオファーや新機能の紹介。
- アプリに戻るよう促す。
実際表示される通知は以下のようになります。
ロック画面▼
画面上部▼
通知を作成するための準備
Android 8.0(APIレベル26)以降では、通知を表示するために「通知チャネル」を設定する必要があります。
以下のように、通知チャネルを作成してください。
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "テスト通知"
val descriptionText = "このチャネルは通知の例です"
val importance = NotificationManager.IMPORTANCE_HIGH
val channel = NotificationChannel("example_channel_id", name, importance).apply {
description = descriptionText
}
// 通知チャネルをシステムに登録
val notificationManager: NotificationManager =
getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
3〜5行目:
name
- 通知チャネルの名前(例: “テスト通知”)です。
- ユーザーの通知設定画面に表示されます。
descriptionText
- 通知チャネルの説明文です。
- 通知設定画面で詳細を説明するために使用されます。
importance
- 通知の重要度を示しています。
- IMPORTANCE_HIGH:音と通知バーに表示される通常の重要度。
6〜7行目:
NotificationChannel
- 新しい通知チャネルを作成するクラスです。
- 引数:
"example_channel_id"
- 通知チャネルの識別子(ユニークな文字列)。
- 通知を送信するときにこのIDを使用してチャネルを指定します。
name
- チャネルの名前。
- 通知の重要度。
apply
ブロック- チャネルの説明(
description
)を追加で設定します。
- チャネルの説明(
11〜13行目:
getSystemService(NOTIFICATION_SERVICE)
- 通知に関するシステムサービスを取得します。
createNotificationChannel(channel)
- 作成した通知チャネルをシステムに登録します。
importance
(通知の重要度)は、他にも以下の種類があります。
定数 | 通知バー | 音 | バイブレーション | ヘッドアップ通知 |
---|---|---|---|---|
IMPORTANCE_NONE | ||||
IMPORTANCE_MIN | (画面一番下に、薄い表示) | |||
IMPORTANCE_DEFAULT | (通常のスタイルで表示) | |||
IMPORTANCE_LOW | オプション次第 | |||
IMPORTANCE_HIGH | (他の通知の影響を受ける場合がある) | |||
IMPORTANCE_HIGH | (常に最優先でヘッドアップ通知が表示され、他の通知に干渉されにくい) |
通知を表示する基本的な方法
準備が整いましたら、早速通知を表示する実装を行いましょう。
val notification = NotificationCompat.Builder(this, "example_channel_id")
.setSmallIcon(android.R.drawable.ic_dialog_info) // アイコン
.setContentTitle("通知タイトル") // 通知のタイトル
.setContentText("これは通知の本文です") // 通知の本文
.build()
NotificationManagerCompat.from(this).notify(1, notification)
1行目:
NotificationCompat.Builder
- 通知を作成するためのクラスです。
- 引数
this
- コンテキスト(通常は
Activity
やService
)
- コンテキスト(通常は
"example_channel_id"
- 通知チャネルのID
(事前にcreateNotificationChannel
メソッドで作成した通知チャネルのIDを指定します。Android 8.0以降必須)
- 通知チャネルのID
2〜5行目:
setSmallIcon
- 通知バーに表示されるアイコンを指定します。
android.R.drawable.ic_dialog_info
はシステムが提供するデフォルトの情報アイコンです。
setContentTitle
- 通知のタイトルを指定(例: 「通知タイトル」)。通知バーや通知詳細画面に表示されます。
setContentText
- 通知の本文を指定(例: 「これは通知の本文です」)。通知の詳細部分に表示されます。
最後にbuild()
でBuilderで設定した内容を元に通知オブジェクトを生成します。
7行目:
NotificationManagerCompat.from(this)
- 通知を管理・表示するためのクラス。
from(this)
で現在のコンテキストに関連付けられたNotificationManagerCompat
インスタンスを取得します。
- 通知を管理・表示するためのクラス。
notify(1, notification)
- 通知を表示するメソッド
- 引数
1
- 通知ID(例:
1
)。通知を一意に識別するために使用します。
- 通知ID(例:
notification
- 作成した通知オブジェクト(
notification
)
- 作成した通知オブジェクト(
- 引数
- 通知を表示するメソッド
例えば、上記処理をボタンのクリックリスナー内にセットすると
以下のように ボタンのタップで通知が表示されるようになります。
まとめ
おつかれさまでした。いかがでしたでしょうか!
通知を作成して表示する機能は、多くのモバイルアプリで採用されています。
ぜひ実装方法を学んで、活用してくださいね!
技術者としてのキャリアパスを次のレベルへと進めたい皆様、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
自分の市場価値をさらに向上させてみませんか?
コメント