A partir de Android 8.0 (nivel de API 26), las insignias de notificaciones (también conocidas como puntos de notificaciones) aparecen en un ícono de selector cuando la app asociada tiene una notificación activa. Los usuarios pueden mantener presionado el ícono de la app para mostrar las notificaciones, junto con los accesos directos a la app, como se muestra en la figura 1.
Estos puntos aparecen de forma predeterminada en las apps de Launcher que los admiten y tu app no necesita realizar ninguna acción. Sin embargo, es posible que en algunas situaciones no quieras que aparezca un punto de notificación o quieras controlar exactamente qué notificaciones se muestran allí.
Cómo inhabilitar las insignias
Hay casos en los que no tiene sentido incluir insignias en las notificaciones, por lo que puedes inhabilitarlas en cada canal. Para ello, llama a setShowBadge(false)
en tu objeto NotificationChannel
.
Por ejemplo, es posible que quieras inhabilitar las insignias de notificaciones en las siguientes situaciones:
- Notificaciones en curso: La mayoría de las notificaciones constantes, como el procesamiento de imágenes, los controles de reproducción de contenido multimedia o las instrucciones de navegación en el momento, no tienen sentido como insignias.
- Recordatorios del Calendario: Evita usar insignias en eventos en desarrollo en el momento.
- Eventos de alarma o reloj: Evita usar notificaciones con insignias relacionadas con alarmas actuales.
En el siguiente ejemplo de código, se muestra cómo ocultar insignias en un canal de notificaciones:
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);
Cómo establecer un recuento personalizado de notificaciones
De forma predeterminada, cada notificación aumenta un número que se muestra en el menú de mantener presionado, como se muestra en la figura 1, pero puedes anularlo en tu app. Por ejemplo, esto podría resultar útil si usas una sola notificación para representar varios mensajes nuevos, pero quieres que el recuento represente la cantidad total de mensajes nuevos.
Para configurar un número personalizado, llama a setNumber()
en la notificación, como se muestra aquí:
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();
Cómo modificar el ícono de menú de mantener presionado de una notificación
En el menú de mantener presionado, se muestra el ícono grande o pequeño asociado con una notificación, si está disponible. De forma predeterminada, en el sistema se muestra el ícono grande, pero puedes llamar a Notification.Builder.setBadgeIconType()
y pasarle la constante BADGE_ICON_SMALL
para que se muestre el ícono pequeño.
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();
Cómo ocultar un acceso directo duplicado
Si tu app crea una notificación que duplica el acceso directo a una app, puedes ocultarlo temporalmente mientras la notificación está activa por medio de una llamada a setShortcutId()
.
Para ver más códigos de ejemplo que usan notificaciones, consulta la app de ejemplo de SociaLite.