通知バッジを編集する

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() を呼び出すことにより、そのショートカットを一時的に非表示にすることができます。

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