Notificaciones básicas

Material Style Notification

Según la documentación de Google sobre en Material Design:

El sistema de notificaciones les permite a los usuarios mantenerse informados sobre eventos relevantes y oportunos de su aplicación, como nuevos mensajes de chat de un amigo o un evento del calendario.

Piense en las notificaciones como un canal de noticias que alerta a los usuarios sobre eventos importantes a medida que se producen. Las notificaciones aparecen sobre la barra de estado.

¿Cómo se utilizan?

I. En tu archivo build.gradle añade la última versión de la librería appcompat.

dependencies {  
    compile 'com.android.support:appcompat-v7:X.X.X' 
    // X.X.X especifica la versión
}

II. Obtén una instancia de NotificationCompat.Builder.

NotificationCompat.Builder builder =  
    new NotificationCompat.Builder(context);

III. Construye una Notification usando el Notification.Builder

Notification notification = builder  
    .setContentTitle("Title")
    .setContentText("This is a notification!")
    .setSmallIcon(R.drawable.ic_notifications_white_small)
    .build();

IV. Muestra la Notification con el método notify del NotificationManagerCompat asignándole un id de tu elección.

NotificationManagerCompat notificationManager =  
    NotificationManagerCompat.from(context);

notificationManager.notify(0x1234, notification);  

Nota: El título, el texto y el icono pequeño son obligatorios para que la notificación pueda mostrarse.

¿Cómo se personaliza?

I. Usa setColor(int color) para darle un toque de color con el NotificationCompat.Builder tus notificaciones.

Notification notification =  
    new NotificationCompat.Builder(context)
        .setContentTitle("Title")
        .setContentText("This is a notification!")
        .setSmallIcon(R.drawable.ic_bell)
        .setColor(Color.parseColor("#4B8A08"))
        .build();

Notificaciones con imágen

Face styled notification

I. Utiliza el método setLargeIcon(Bitmap) de NotificationCompat.Builder para utilizar una imagen en grande junto al icono pequeño.

Notification notification =  
    new NotificationCompat.Builder(context)
        .setContentTitle("Title")
        .setContentText("This is a notification!")
        .setSmallIcon(R.drawable.ic_bell)
        .setLargeIcon(profileImageBitmap) // Bitmap
        .setColor(Color.parseColor("#4B8A08"))
        .build();

II. Muestra la Notification con el método notify del NotificationManagerCompat asignándole un id de tu elección.

NotificationManagerCompat notificationManager =  
    NotificationManagerCompat.from(context);

notificationManager.notify(0x1234, notification);  

Notificaciones con vibración

I. Utiliza setVibrate(long[]) de NotificationCompat.Builder para crear patrones de vibración que acompañarán la aparición de la notificación.

long[] vibratePattern = new long[] {  
   millisToWait, millisToVibrate, 
   millisToWait, millisToVibrate
}

Notification notification =  
    new NotificationCompat.Builder(context)
        .setContentTitle("Title")
        .setContentText("This is a notification!")
        .setSmallIcon(R.drawable.ic_bell)
        .setVibrate(vibratePattern)
        .build();

II. Muestra la Notification con el método notify del NotificationManagerCompat asignándole un id de tu elección.

NotificationManagerCompat notificationManager =  
    NotificationManagerCompat.from(context);

notificationManager.notify(0x1234, notification);  

Notificaciones con luz

I. Utiliza el método setLights(int argb, int msOn, int msOff) de de NotificationCompat.Builder para personalizar el color y el patrón del LED de notificaciones del dispositivo (siempre y cuando el dispositivo lo soporte)

Notification notification =  
   new NotificationCompat.Builder(context)
      .setContentTitle("Title")
      .setContentText("This is a notification!")
      .setSmallIcon(R.drawable.ic_bell)
      .setLights(Color.MAGENTA, onMillis, offMillis)
      .build();

Trucos y buenas prácticas

I. Notifica al usuario únicamente con información importante direccionada específicamente a él.

II. Para notificaciones mandadas por cualquier persona, incluye la imagen de la persona.

III. Cuando el usuario toca una notificación, permite al usuario inmediatamente realizar una acción. Puede aser abrir una vista de detalle, como un mensaje, ona vista resumen para múltiple notificaciones.

IV. El recortado circular se utiliza por defecto cuando no se utiliza el método setLargeIcon y se utiliza el método setSmallIcon. En caso de utilizar el método setLargeIcon la imagen circular ha de realizarse manualmente.

Errores de compatibilidad

I Las notificaciones tienen otro aspectos diferentes en Holo y Material, además, algunas funcionalidades como el tintado no están disponibles.

Holo

Material