Operaciones Básicas con Notificaciones en Android

Este artículo explora diversas funcionalidades para la gestión de notificaciones en aplicaciones Android, detallando su implementación y configuración.

  1. Notificaciones Fundamentales

Para crear una notificación básica, se utiliza la clase Notification.Builder. A partir de Android 8.0 (API nivel 26), es obligatorio asociar un channelId a la notificación y crear un NotificationChannel correspondiente. A continuación, se presenta un ejemplo de código:


public void generarNotificacionBasica(View vista) {
    Notification.Builder constructorNotificacion;
    String idCanal = "mi_canal_notificaciones"; // Identificador único del canal

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        constructorNotificacion = new Notification.Builder(this, idCanal);
    } else {
        constructorNotificacion = new Notification.Builder(this);
    }

    constructorNotificacion.setSmallIcon(R.mipmap.ic_launcher); // Ícono pequeño
    constructorNotificacion.setAutoCancel(true); // Eliminar notificación al ser tocada
    constructorNotificacion.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)); // Ícono grande
    constructorNotificacion.setContentTitle("Notificación Sencilla"); // Título principal
    constructorNotificacion.setContentText("Esta es una notificación básica."); // Texto descriptivo
    constructorNotificacion.setSubText("Nivel básico"); // Texto secundario

    // Configuración de la acción al tocar la notificación
    Intent intencion = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.ejemplo.com"));
    PendingIntent intencionPendiente = PendingIntent.getActivity(this, 0, intencion, PendingIntent.FLAG_IMMUTABLE);
    constructorNotificacion.setContentIntent(intencionPendiente);

    NotificationManager gestorNotificaciones = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    // Creación del canal de notificación para Android 8.0+
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel canal = new NotificationChannel(idCanal, "Nombre del Canal", NotificationManager.IMPORTANCE_LOW);
        // IMPORTANCE_LOW: Notificación visible en la barra de estado, sin sonido ni interrupción visual.
        gestorNotificaciones.createNotificationChannel(canal);
    }

    int idNotificacionUnica = 1; // Identificador único para esta notificación
    gestorNotificaciones.notify(idNotificacionUnica, constructorNotificacion.build());
}

Consideraciones importantes:

  • La longitud máxima para channelId y el nombre del canal es de 40 caracteres; de lo contrario, se truncarán.
  • Cada channelId dentro de una aplicación debe ser único. Si se reutiliza un ID, las notificaciones posteriores con el mismo ID sobrescribirán las anteriores.
  1. Notificaciones Colapsadas (Personalizadas)

Para personalizar la apariencia de una notificación cuando está colapsada, se utilizan RemoteViews. Esto permite definir un layout de notificación propio.


// ... (dentro del método del builder) ...

// Layout para la vista colapsada
RemoteViews vistaContenido = new RemoteViews(getPackageName(), R.layout.layout_notificacion_colapsada);
vistaContenido.setTextViewText(R.id.id_texto_notificacion, "Mensaje para vista colapsada");
constructorNotificacion.setCustomContentView(vistaContenido);

// Layout para la vista expandida (opcional)
RemoteViews vistaContenidoExpandido = new RemoteViews(getPackageName(), R.layout.layout_notificacion_expandida);
// ... (configurar elementos en vistaContenidoExpandido) ...
constructorNotificacion.setCustomBigContentView(vistaContenidoExpandido);

Los archivos XML layout_notificacion_colapsada.xml y layout_notificacion_expandida.xml deben crearse según los requisitos de diseño.

  1. Notificaciones de Pantalla Completa (Colgantes)

Las notificaciones que ocupan toda la pantalla al recibirse, conocidas como "colgantes" o de pantalla completa, se configuran mediente el método setFullScreenIntent en lugar de setContentIntent.


// ... (dentro del método del builder) ...
Intent intencionPantallaCompleta = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.ejemplo.com/emergencia"));
PendingIntent intencionPendientePantallaCompleta = PendingIntent.getActivity(this, 1, intencionPantallaCompleta, PendingIntent.FLAG_IMMUTABLE);
constructorNotificacion.setFullScreenIntent(intencionPendientePantallaCompleta, true);

Niveles de Importancia del Canal (NotificationChannel.importance):

  • IMPORTANCE_NONE: No muestra la notificación.
  • IMPORTANCE_MIN: Muestra en la barra de estado, sin sonido ni interrupción.
  • IMPORTANCE_LOW: Muestra en la barra de estado, sin sonido.
  • IMPORTANCE_DEFAULT: Muestra en la barra de estado con sonido, sin interrupción.
  • IMPORTANCE_HIGH: Muestra como una notificación emergente (interrumpe al usuario) con sonido.

Nota de Depuración: Si una notificación de pantalla completa no aparece, verifique la configuración de notificaciones del dispositivo. Es posible que la categoría de notificación no esté configurada para mostrar "banners" o notificaciones emergentes.

  1. Visibilidad de Notificaciones en la Pantalla de Bloqueo

Android permite controlar qué información se muestra en la pantalla de bloqueo utilizando diferentes niveles de visibilidad:

  • Notification.VISIBILITY_PRIVATE: Muestra información básica (título, ícono) solo si el dispositivo no está bloqueado.
  • Notification.VISIBILITY_PUBLIC: Muestra toda la información de la notificación, independientemente del estado de bloqueo.
  • Notification.VISIBILITY_SECRET: No muestra nada de la notificación en la pantalla de bloqueo.

Se configuran directamente en el Notification.Builder:


// Ejemplo para hacerla pública en pantalla de bloqueo
constructorNotificacion.setVisibility(Notification.VISIBILITY_PUBLIC);

Para más detalles sobre la gestión de notificaciones, consulte la documentación oficial o recursos como esta referencia.

Etiquetas: Android Notificaciones NotificationCompat Canales de Notificación RemoteViews

Publicado el 7-12 02:12