Modyfikowanie plakietki powiadomień

Począwszy od Androida 8.0 (poziom interfejsu API 26), plakietki powiadomień – nazywane też kropkami powiadomień – pojawiają się na ikonie programu uruchamiającego, gdy powiązana aplikacja ma aktywne powiadomienie. Użytkownicy mogą nacisnąć i przytrzymać ikonę aplikacji, aby wyświetlić powiadomienia oraz wszystkie skróty aplikacji, jak widać na ilustracji 1.

Pojawiają się one domyślnie w aplikacjach uruchamiających, które je obsługują, i nie musisz nic robić w aplikacji. W niektórych sytuacjach możesz jednak nie chcieć, aby kropka z powiadomieniem się wyświetlała, lub chcesz mieć kontrolę nad tym, jakie powiadomienia się tam pojawią.

Rysunek 1. Plakietki powiadomień oraz menu dotknięcia i przytrzymania.

Wyłącz plakietki

W niektórych przypadkach plakietki nie mają sensu w przypadku powiadomień, więc możesz je wyłączyć w poszczególnych kanałach, wywołując metodę setShowBadge(false) z użyciem obiektu NotificationChannel.

Plakietki powiadomień możesz wyłączyć na przykład w tych sytuacjach:

  • Ciągłe powiadomienia: większość aktualnych powiadomień, np. dotyczących przetwarzania obrazów, elementów sterujących odtwarzaniem multimediów czy bieżących instrukcji nawigacyjnych, nie ma sensu jako plakietki.
  • Przypomnienia z kalendarza: unikaj dodawania plakietek do wydarzeń występujących w bieżącym czasie.
  • Zdarzenia zegara lub alarmów: unikaj powiadomień z plakietką związanymi z bieżącymi alarmami.

Ten przykładowy kod pokazuje, jak ukryć plakietki w kanale powiadomień:

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);

Ustaw niestandardową liczbę powiadomień

Domyślnie każde powiadomienie zwiększa liczbę wyświetlaną w menu „Dotknij i przytrzymaj”, jak widać na ilustracji 1, ale możesz zmienić tę wartość w przypadku swojej aplikacji. Może to być przydatne np. wtedy, gdy używasz tylko jednego powiadomienia do reprezentowania wielu nowych wiadomości, ale chcesz, by liczba odzwierciedlała łączną liczbę nowych wiadomości.

Aby ustawić własny numer, zadzwoń pod numer setNumber() z powiadomienia, jak pokazano tutaj:

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();

Zmiana ikony menu przez naciśnięcie i przytrzymanie powiadomienia

W menu „Dotknij i przytrzymaj” pojawi się mała lub duża ikona związana z powiadomieniem, jeśli jest dostępna. Domyślnie system wyświetla dużą ikonę, ale można wywołać funkcję Notification.Builder.setBadgeIconType() i przekazać stałą BADGE_ICON_SMALL, aby wyświetlić małą ikonę.

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();

Ukrywanie zduplikowanego skrótu

Jeśli aplikacja utworzy powiadomienie, które powiela skrót do aplikacji, możesz tymczasowo ukryć skrót, gdy powiadomienie jest aktywne, wywołując metodę setShortcutId().

Przykładowy kod wykorzystujący powiadomienia znajdziesz w artykule o osobach (w języku angielskim).