通知バッジを変更する

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() を呼び出すことで、通知がアクティブなときにショートカットを一時的に非表示にできます。

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