The Android Developer Challenge is back! Submit your idea before December 2.

通知バッジを変更する

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 のサンプル通知をご覧ください。