Android 7.0(API レベル 24)以降では、関連する通知を 1 つのグループ内に表示できます。たとえば、受信メールに関してアプリが通知を表示する場合、すべての通知を 1 つのグループに入れることで、まとめて折りたたむことができます。
古いバージョンをサポートするには、別々の通知をすべて概要だけを表示する概要通知を追加します。多くの場合、受信トレイスタイルの通知を使用することをおすすめします。
ユースケースで次のすべての条件が満たされている場合は、通知グループを使用します。
子通知が完全な通知であり、グループの概要なしに、子通知を個別に表示できる。
子通知を個々に表示する利点がある。次に例を示します。
子通知に対して操作が可能で、各通知に固有の操作がある。
各通知に、ユーザーに表示する必要がある詳細情報がある。
通知が上記の条件を満たしていない場合は、代わりに新しい情報で既存の通知を更新するか、同じ会話に複数の最新情報を表示するメッセージ スタイルの通知を作成することを検討してください。
グループを作成して通知を追加する
通知グループを作成するには、そのグループ用の一意の ID 文字列を定義します。その後は、グループ内の通知ごとに setGroup()
を呼び出してそのグループ名を渡すだけです。例:
Kotlin
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL" val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.new_mail) .setContentTitle(emailObject.getSenderName()) .setContentText(emailObject.getSubject()) .setLargeIcon(emailObject.getSenderAvatar()) .setGroup(GROUP_KEY_WORK_EMAIL) .build()
Java
String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"; Notification newMessageNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.new_mail) .setContentTitle(emailObject.getSenderName()) .setContentText(emailObject.getSubject()) .setLargeIcon(emailObject.getSenderAvatar()) .setGroup(GROUP_KEY_WORK_EMAIL) .build();
デフォルトでは、通知は送信日時順にソートされますが、setSortKey()
を呼び出すことで、順序を変更することができます。
通知グループのアラートを別の通知で処理する必要がある場合は、setGroupAlertBehavior()
を呼び出します。たとえば、グループの概要のみにノイズを発生させるには、グループ内のすべての子にグループ アラート動作 GROUP_ALERT_SUMMARY
が必要です。他のオプションは GROUP_ALERT_ALL
と GROUP_ALERT_CHILDREN
です。
グループ概要を設定する
グループ化された通知には、グループの概要として機能する追加の通知が必要です。グループ化された通知を有効にするには、グループの概要を設定する必要があります。このグループの概要には、ユーザーがグループ内の内容を理解できるように、グループ内の他の各通知のテキストの一部を含める必要があります。グループの概要の表示方法は、Android のバージョンによって異なります。
通知のネストされたグループを表示できない Android 7.0(API レベル 24)より前のバージョンでは、グループの概要通知のみが表示され、他の通知はすべて非表示になります。ユーザーは、グループ概要通知をタップしてアプリを開きます。
Android 7.0 以降では、グループの概要通知が、ネストされた通知のグループとして表示され、グループ化された各通知のテキスト スニペットでラベル付けされています。グループの概要通知に設定したテキストは表示されません。図 1 に示すように、ユーザーはネストされた通知グループを開いて、グループ内の個々の通知を確認できます。
新しいバージョンの Android では、設計したグループの概要テキストが表示されない場合でも、グループ化された通知を有効にするには、常に概要を手動で設定する必要があります。グループの概要の動作は、ウェアラブルなど、一部のデバイスタイプでは異なることがあります。グループの概要でリッチ コンテンツを設定すると、すべてのデバイスとバージョンで最適なエクスペリエンスを提供できます。
グループ概要を追加する手順は次のとおりです。
グループの説明を含む新しい通知を作成します。通常は、受信トレイスタイルの通知を使用することをおすすめします。
setGroup()
を呼び出して、概要通知をグループに追加します。setGroupSummary(true)
を呼び出して、グループの概要として使用する必要があることを指定します。
次のコードは、グループの概要を作成する例を示しています。
Kotlin
// Use constant ID for notifications used as group summary. val SUMMARY_ID = 0 val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL" val newMessageNotification1 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject1.getSummary()) .setContentText("You will not believe...") .setGroup(GROUP_KEY_WORK_EMAIL) .build() val newMessageNotification2 = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject2.getSummary()) .setContentText("Please join us to celebrate the...") .setGroup(GROUP_KEY_WORK_EMAIL) .build() val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID) .setContentTitle(emailObject.getSummary()) // Set content text to support devices running API level < 24. .setContentText("Two new messages") .setSmallIcon(R.drawable.ic_notify_summary_status) // Build summary info into InboxStyle template. .setStyle(NotificationCompat.InboxStyle() .addLine("Alex Faarborg Check this out") .addLine("Jeff Chang Launch Party") .setBigContentTitle("2 new messages") .setSummaryText("janedoe@example.com")) // Specify which group this notification belongs to. .setGroup(GROUP_KEY_WORK_EMAIL) // Set this notification as the summary for the group. .setGroupSummary(true) .build() NotificationManagerCompat.from(this).apply { notify(emailNotificationId1, newMessageNotification1) notify(emailNotificationId2, newMessageNotification2) notify(SUMMARY_ID, summaryNotification) }
Java
// Use constant ID for notifications used as group summary. int SUMMARY_ID = 0; String GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"; Notification newMessageNotification1 = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject1.getSummary()) .setContentText("You will not believe...") .setGroup(GROUP_KEY_WORK_EMAIL) .build(); Notification newMessageNotification2 = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.ic_notify_email_status) .setContentTitle(emailObject2.getSummary()) .setContentText("Please join us to celebrate the...") .setGroup(GROUP_KEY_WORK_EMAIL) .build(); Notification summaryNotification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setContentTitle(emailObject.getSummary()) // Set content text to support devices running API level < 24. .setContentText("Two new messages") .setSmallIcon(R.drawable.ic_notify_summary_status) // Build summary info into InboxStyle template. .setStyle(new NotificationCompat.InboxStyle() .addLine("Alex Faarborg Check this out") .addLine("Jeff Chang Launch Party") .setBigContentTitle("2 new messages") .setSummaryText("janedoe@example.com")) // Specify which group this notification belongs to. .setGroup(GROUP_KEY_WORK_EMAIL) // Set this notification as the summary for the group. .setGroupSummary(true) .build(); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(emailNotificationId1, newMessageNotification1); notificationManager.notify(emailNotificationId2, newMessageNotification2); notificationManager.notify(SUMMARY_ID, summaryNotification);
概要通知 ID は、1 回だけ送信し、概要情報が変更されたときに後で更新できるように、同じにする必要があります。グループにメンバーが追加されたことで、既存の概要の更新が必要になった場合など)。
通知を使用するサンプルコードについては、Android 通知サンプルをご覧ください。
自動グループ化
Android 7.0(API レベル 24)以降では、アプリが通知を送信し、グループキーまたはグループ概要を指定していない場合、システムによって通知が自動的にグループ化されることがあります。自動的にグループ化された通知は、グループ化された通知の一部から取得したテキスト スニペットでラベル付けされたグループの概要通知とともに表示されます。ユーザーは、手動でグループ化された通知と同様に、この概要通知を展開して個々の通知を確認できます。
自動グループ化の動作は、デバイスの種類によって異なる場合があります。すべてのデバイスとバージョンで最適なエクスペリエンスを提供するには、通知をグループ化する必要があることがわかっている場合は、グループキーとグループの概要を指定して、通知がグループ化されるようにします。