A partir de Android 8.0 (nivel de API 26), las insignias de notificaciones, también conocidas como puntos de notificación, 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 apps, como se muestra en la figura 1.
Estos puntos aparecen de forma predeterminada en las apps de selector que los admiten, y tu app no necesita hacer nada. Sin embargo, puede haber situaciones en las que no quieras que aparezca el punto de notificación o quieras controlar exactamente qué notificaciones aparecen allí.
Cómo inhabilitar las insignias
Hay casos en los que las insignias no tienen sentido para las notificaciones, por lo que puedes inhabilitarlas por canal si llamas a setShowBadge(false)
en tu objeto NotificationChannel
.
Por ejemplo, es posible que quieras inhabilitar las insignias de notificación en las siguientes situaciones:
- Notificaciones continuas: La mayoría de las notificaciones continuas, como el procesamiento de imágenes, los controles de reproducción de contenido multimedia o las instrucciones de navegación actuales, no tienen sentido como insignias.
- Recordatorios del calendario: Evita usar insignias en eventos que ocurran en el momento actual.
- Eventos de alarma o reloj: Evita las notificaciones con insignias relacionadas con las alarmas actuales.
En el siguiente código de ejemplo, 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 el número que se muestra en el menú de mantener presionado, como se muestra en la figura 1, pero puedes anular ese número en tu app. Por ejemplo, este podría ser útil si usas una sola notificación para representar varios mensajes nuevos, pero deseas que el recuento represente el total de mensajes nuevos.
Para configurar un número personalizado, llama a setNumber()
en la notificación, como se muestra a continuación:
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, el sistema muestra el ícono grande, pero puedes llamar a Notification.Builder.setBadgeIconType()
y pasar la constante BADGE_ICON_SMALL
para mostrar 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 llamando a setShortcutId()
.
Para ver más códigos de muestra que usan notificaciones, consulta Ejemplo de personas.