Изменение значка уведомления

Начиная с Android 8.0 (уровень API 26), значки уведомлений, также известные как точки уведомлений, появляются на значке средства запуска, когда связанное приложение имеет активное уведомление. Пользователи могут коснуться и удерживать значок приложения, чтобы отобразить уведомления, а также ярлыки приложений , как показано на рис. 1.

Эти точки появляются по умолчанию в приложениях запуска, которые их поддерживают, и вашему приложению не нужно ничего делать. Однако могут возникнуть ситуации, когда вы не хотите, чтобы точка уведомления отображалась, или хотите точно контролировать, какие уведомления там появляются.

Рис. 1. Значки уведомлений и сенсорное меню.

Отключить значки

В некоторых случаях значки не имеют смысла для ваших уведомлений, поэтому вы можете отключить их для каждого канала, вызвав setShowBadge(false) для вашего объекта NotificationChannel .

Например, вы можете отключить значки уведомлений в следующих ситуациях:

  • Текущие уведомления: большинство текущих уведомлений, таких как обработка изображений, элементы управления воспроизведением мультимедиа или текущие инструкции по навигации, не имеют смысла в качестве значка.
  • Напоминания календаря: избегайте событий, происходящих в настоящее время.
  • События часов или сигналов тревоги: избегайте уведомлений о значках, связанных с текущими сигналами тревоги.

В следующем примере кода показано, как скрыть значки для канала уведомлений:

Котлин

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)

Ява

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, но вы можете переопределить это число для своего приложения. Например, это может быть полезно, если вы используете только одно уведомление для представления нескольких новых сообщений, но хотите, чтобы счетчик отражал общее количество новых сообщений.

Чтобы установить собственный номер, вызовите setNumber() в уведомлении, как показано здесь:

Котлин

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

Ява

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 для отображения маленького значка.

Котлин

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

Ява

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

Дополнительные примеры кода, использующие уведомления, см. в примере «Люди» .