[Qiita] Android Nでたくさんの通知をまとめてみたよ

※この記事は以前Qiitaに投稿されていた古い記事です

はじめに

Android Nで新しく提供されたバンドル通知を試してみたので、実装方法のメモです。

バンドル通知の実装

通知をまとめるための通知

まず、複数の通知を1つにまとめるための通知をします。
通知がまとめられた際に、SummaryText以外はセットしても表示されないので、SummaryTextのみセットします。
最後のnotifyメソッドの通知IDは固定にしておかないと毎回別々の通知になってしまうので、定数で任意の値を定義しておきます。

// サマリ通知
Notification summaryNotification = new NotificationCompat.Builder(this)
        .setSmallIcon(android.R.drawable.ic_dialog_email)
        .setStyle(new NotificationCompat.BigTextStyle()
                .setSummaryText("SummaryText"))
        .setGroup(GROUP_KEY)
        .setGroupSummary(true)
        .build();
notificationManager.notify(SUMMARY_NOTIFICATION_ID, summaryNotification);
項目 内容
summaryText 通知の概要
smallIcon 通知のアイコン
group 通知のまとまりを識別するためのKEY
groupSummary 通知をまとめるための通知かどうか

まとまってる通知に通知する

あとは普通に通知します。
通知をまとめるため、setGroupでサマリ通知と同じGROUP_KEYを設定しておく必要があります。
ここではとりあえず5個くらい通知してみます。

for (int i = 1; i <= 5; i++) {
    int uuid = UUID.randomUUID().hashCode();
    Notification notif = new NotificationCompat.Builder(this)
            .setSmallIcon(android.R.drawable.ic_dialog_alert)
            .setStyle(new NotificationCompat.BigTextStyle()
                    .setBigContentTitle("BigContentTitle" + i)
                    .setSummaryText("SummaryText" + i)
                    .bigText("bigText" + i))
            .setGroup(GROUP_KEY)
            .build();
    notificationManager.notify(uuid, notif);
}

実行してみる

image.png

できた!

他のバージョン(Android 5.0)で実行すると…

サマリ通知だけ表示され、他は出てきません。
バンドル通知はAndroid Nからの機能なので、うまく表示されないのは当然といえば当然ですね。

image.png

Android Wearだと…

Android Wearでは似たような機能があるため、Android Nと同じように通知がまとまって表示されます。
「+4 more」と書かれている部分をタップすると、通知が1枚1枚表示されます。

image.png

グループ化された通知の上限

グループ化された通知は最大8個までしか表示できないようです。
しかし、上の通知を消せば、隠れてた通知が順番に出てきます。

image.png

結論

  • 通知がまとまってくれると超便利
  • Android N未満とAndroid N以上で通知の実装を分ける必要がありそう
  • Android Wearも別途通知を実装する必要がありそう

何か間違っているところなどあれば教えていただけると嬉しいです。
以上、お疲れさまでした。

参考

通知 | Android Developers
https://developer.android.com/preview/features/notification-updates.html?hl=ja



コメント

人気の投稿

【Linux】Linuxでディレクトリ毎にzip圧縮する

[Qiita] Google Playのクローズドベータ版テストでメールアドレスを指定して公開する

[Qiita] Androidの実機でPCのlocalhostに接続したり、Webページの要素を検証する