Modyfikowanie plakietki powiadomień

Począwszy od Androida 8.0 (interfejs API 26), plakietki powiadomień (nazywane też kropkami powiadomień) pojawiają się na ikonie w menu, gdy powiązana z nią aplikacja ma aktywne powiadomienie. Użytkownicy mogą dotknąć i przytrzymać ikonę aplikacji, aby wyświetlić powiadomienia i skróty aplikacji, jak pokazano na rysunku 1.

Te kropki są domyślnie wyświetlane w aplikacjach z ekranem startowym, które je obsługują. Twoja aplikacja nie musi nic robić, aby je wyświetlić. Może się jednak zdarzyć, że nie chcesz, aby taka kropka się wyświetlała, lub chcesz kontrolować, które powiadomienia mają się na niej pojawiać.

Rysunek 1. Plakietki powiadomień i menu dotykowe

Wyłączanie przyznawania odznak

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

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

  • Powiadomienia ciągłe: większość powiadomień ciągłych, takich jak przetwarzanie obrazu, elementy sterujące odtwarzaniem multimediów czy bieżące instrukcje nawigacyjne, nie ma sensu jako plakietka.
  • Przypomnienia w kalendarzu: unikaj przypinania wydarzeń, które mają miejsce w danym momencie.
  • Zdarzenia związane z zegarem lub alarmem: unikaj powiadomień z notyfikacjami dotyczącymi bieżących alarmów.

Poniższy przykładowy kod pokazuje, jak ukryć plakietki dla kanału 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);

Ustawianie niestandardowej liczby powiadomień

Domyślnie każde powiadomienie zwiększa liczbę wyświetlaną w menu dotknij i przytrzymaj (jak na rysunku 1), ale możesz ją zastąpić w swojej aplikacji. Może to być przydatne, jeśli używasz tylko jednego powiadomienia do reprezentowania wielu nowych wiadomości, ale chcesz, aby liczba odzwierciedlała łączną liczbę nowych wiadomości.

Aby ustawić numer niestandardowy, zadzwoń na numersetNumber(), 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 powiadomienia za pomocą ikony menu naciśnij i przytrzymaj

W menu dotknij i przytrzymaj wyświetla się duża lub mała ikona powiązana z powiadomieniem (jeśli jest dostępna). Domyślnie system wyświetla dużą ikonę, ale możesz wywołać funkcję Notification.Builder.setBadgeIconType() i przekazać stałą wartość 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 duplikatu skrótu

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

Więcej przykładowego kodu korzystającego z powiadomień znajdziesz w aplikacji przykładowej SociaLite.