通知バッジを変更する

Android 8.0(API レベル 26)以降、関連付けられたアプリにアクティブな通知があると、通知バッジ(通知ドット)がランチャー アイコンに表示されます。ユーザーは、図 1 に示すように、アプリアイコンを長押しして通知を表示できます(アプリ ショートカットがある場合は、通知と一緒に表示されます)。

通知バッジをサポートしているランチャー アプリであれば、デフォルトで通知バッジが表示されるため、アプリ側で必要な処理はありません。ただし、通知ドットを表示したくないケースや、表示する通知を細かく管理したいケースも考えられます。

図 1. 通知バッジと長押しメニュー。

バッジを無効にする

通知によってはバッジが意味をなさない場合もあります。NotificationChannel オブジェクトに対して setShowBadge(false) を呼び出すことで、チャネルごとにバッジを無効にすることができます。

たとえば、以下のような状況で通知バッジを無効にすることが考えられます。

  • 進行中の通知: 画像の処理中、メディアの再生コントロール、現在のナビゲーションの説明など、進行中の処理に関する通知のほとんどで、バッジは意味をなしません。
  • カレンダーのリマインダー: 現時点で行われているイベントにはバッジは表示しないようにします。
  • 時計またはアラームのイベント: 現在のアラームに関する通知にはバッジを表示しないようにします。

通知チャンネルのバッジを非表示にする方法を次のサンプルコードで示します。

Kotlin

val id = "my_channel_01"
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_LOW
val mChannel = NotificationChannel(id, name, importance).apply {
    description = descriptionText
    setShowBadge(false)
}
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)

Java

String id = "my_channel_01";
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
mChannel.setDescription(description);
mChannel.setShowBadge(false);

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(mChannel);

カスタム通知件数を設定する

デフォルトでは、長押しメニュー(図 1 に表示)に通知の件数が表示され、通知があるごとに 1 つ増えますが、アプリでこの数をオーバーライドすることができます。たとえば、複数の新着メッセージに対して 1 つしか表示しない通知上で、新着メッセージの合計数を示すようにしたい場合に便利です。

カスタム通知件数を設定するには、次に示すように、通知に対して setNumber() を呼び出します。

Kotlin

var notification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setNumber(messageCount)
        .build()

Java

Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setNumber(messageCount)
        .build();

通知の長押しメニュー アイコンを変更する

長押しメニューには、通知に関連付けられている大きなアイコンまたは小さなアイコンが表示されます(アイコンが指定されている場合)。デフォルトでは大きなアイコンが表示されますが、Notification.Builder.setBadgeIconType() を呼び出して BADGE_ICON_SMALL 定数を渡すと、小さなアイコンを表示できます。

Kotlin

var notification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
        .build()

Java

Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
        .build();

重複しているショートカットを非表示にする

アプリ ショートカットを複製する通知をアプリが作成する場合、通知がアクティブなときに setShortcutId() を呼び出すことにより、そのショートカットを一時的に非表示にすることができます。

通知を使用するその他のサンプルコードについては、SociaLite サンプルアプリをご覧ください。