¿Cómo crear una notificación con NotificationCompat.Builder?

Necesito crear una notificación simple que se mostrará en la barra de notificaciones junto con el sonido y el ícono si es posible? También necesito que sea compatible con Android 2.2, así que descubrí que NotificationCompat.Builder funciona con todas las API superiores a 4. Si hay una mejor solución, no dude en mencionarla.

NotificationCompat.Builder es la forma más sencilla de crear Notifications en todas las versiones de Android. Incluso puede usar funciones que están disponibles con Android 4.1. Si su aplicación se ejecuta en dispositivos con Android> = 4.1, se usarán las nuevas características, si se ejecuta en Android <4.1, la notificación será una simple notificación anterior.

Para crear una Notificación simple, simplemente hazlo (consulta la Guía de la API de Android en Notificaciones ):

 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .setContentIntent(pendingIntent); //Required on Gingerbread and below 

Tienes que configurar al menos smallIcon , contentTitle y contentText . Si pierde una, la Notificación no se mostrará.

Cuidado: en Gingerbread y abajo tienes que establecer la intención del contenido, de lo contrario se IllegalArgumentException una IllegalArgumentException .

Para crear una intención que no hace nada, use:

 final Intent emptyIntent = new Intent(); PendingIntent pendingIntent = PendingIntent.getActivity(ctx, NOT_USED, emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Puede agregar sonido a través del generador, es decir, un sonido del RingtoneManager:

 mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 

La notificación se agrega a la barra a través del NotificationManager:

 NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(mId, mBuilder.build()); 

Ejemplo de trabajo:

  Intent intent = new Intent(ctx, HomeActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder b = new NotificationCompat.Builder(ctx); b.setAutoCancel(true) .setDefaults(Notification.DEFAULT_ALL) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.ic_launcher) .setTicker("Hearty365") .setContentTitle("Default notification") .setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.") .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND) .setContentIntent(contentIntent) .setContentInfo("Info"); NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(1, b.build()); 

Hago este método y funciono bien. (probado en Android 6.0.1)

 public void notifyThis(String title, String message) { NotificationCompat.Builder b = new NotificationCompat.Builder(this.context); b.setAutoCancel(true) .setDefaults(NotificationCompat.DEFAULT_ALL) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.favicon32) .setTicker("{your tiny message}") .setContentTitle(title) .setContentText(message) .setContentInfo("INFO"); NotificationManager nm = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(1, b.build()); } 

Puedes probar este código, esto funciona bien para mí:

  NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this); Intent i = new Intent(noti.this, Xyz_activtiy.class); PendingIntent pendingIntent= PendingIntent.getActivity(this,0,i,0); mBuilder.setAutoCancel(true); mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL); mBuilder.setWhen(20000); mBuilder.setTicker("Ticker"); mBuilder.setContentInfo("Info"); mBuilder.setContentIntent(pendingIntent); mBuilder.setSmallIcon(R.drawable.home); mBuilder.setContentTitle("New notification title"); mBuilder.setContentText("Notification text"); mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(2,mBuilder.build()); 

Notificación en profundidad

CÓDIGO

 Intent intent = new Intent(this, SecondActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.your_notification_icon) .setContentTitle("Notification Title") .setContentText("Notification ") .setContentIntent(pendingIntent ); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, mBuilder.build()); 

Conocimiento de profundidad

La notificación se puede comstackr utilizando las clases Notification.Builder o NotificationCompat.Builder.
Pero si desea compatibilidad con versiones anteriores, debe utilizar la clase NotificationCompat.Builder, ya que forma parte de la biblioteca de soporte v4, ya que se encarga de los trabajos pesados ​​para proporcionar un aspecto uniforme y funcionalidades de Notificación para API 4 y superior.

Propiedades de notificación principal

La notificación tiene 4 propiedades principales (3 propiedades de visualización básicas + 1 acción de acción de clic)

  • Ícono pequeño
  • Título
  • Texto
  • Evento de clic de botón (evento Click cuando toca la notificación)

El evento de clic de botón se hace opcional en Android 3.0 y superior. Significa que puede crear su notificación utilizando solo propiedades de visualización si su minSdk apunta a Android 3.0 o superior. Pero si desea que su notificación se ejecute en dispositivos más antiguos que Android 3.0, debe proporcionar el evento Click, de lo contrario verá IllegalArgumentException.

Visualización de notificaciones

Las notificaciones se muestran llamando al método notify () de la clase NotificationManger

parámetros de notify ()

Hay dos variantes disponibles para el método de notificación

 notify(String tag, int id, Notification notification) 

o

 notify(int id, Notification notification) 

El método de notificación toma un número entero para identificar de manera única su notificación. Sin embargo, también puede proporcionar una etiqueta de cadena opcional para una mayor identificación de su notificación en caso de conflicto.

Este tipo de conflicto es raro, pero digamos que ha creado una biblioteca y otros desarrolladores están usando su biblioteca. Ahora crean su propia notificación y, de alguna manera, su notificación y la identificación de notificación de otro desarrollador son las mismas, entonces se enfrentarán conflictos.

Notificación después de API 11 (Más control)

API 11 proporciona control adicional en el comportamiento de notificación

  • Notificación de despido
    De forma predeterminada, si el usuario toca una notificación, realiza el evento de clic asignado pero no borra la notificación. Si desea que se borre su notificación cuando debe agregar esto

    mBuilder.setAutoClear (verdadero);

  • Evitar que el usuario descarte la notificación
    El usuario también puede descartar la notificación pasando el dedo. Puede deshabilitar este comportamiento predeterminado al agregar esto al crear su notificación

    mBuilder.setOngoing (verdadero);

  • Posicionamiento de la notificación
    Puede establecer la prioridad relativa a su notificación por

    mBuilder.setOngoing (int pri);

Si su aplicación se ejecuta en una API inferior a la 11, su notificación funcionará sin las características adicionales mencionadas anteriormente. Esta es la ventaja de elegir NotificationCompat.Builder en Notification.Builder

Notificación después de API 16 (Más informativo)

Con la introducción de API 16, las notificaciones recibieron tantas características nuevas
La notificación puede ser mucho más informativa.
Puede agregar una imagen grande a su logotipo. Supongamos que recibe un mensaje de una persona ahora con mBuilder.setLargeIcon (bitmap), puede mostrar la foto de esa persona. Por lo tanto, en la barra de estado verá el icono cuando se desplace, verá la foto de la persona en lugar del icono. También hay otras características

  • Agrega un contador en la notificación
  • Teletipo cuando ves la notificación por primera vez
  • Notificación expansible
  • Notificación de línea múltiple y así sucesivamente

forma simple de hacer notificaciones

  NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) //icon .setContentTitle("Test") //tittle .setAutoCancel(true)//swipe for delete .setContentText("Hello Hello"); //content NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(1, builder.build() ); 

Usa este código

  Intent intent = new Intent(getApplicationContext(), SomeActvity.class); PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(), (int) System.currentTimeMillis(), intent, 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext()) .setSmallIcon(R.drawable.your_notification_icon) .setContentTitle("Notification title") .setContentText("Notification message!") .setContentIntent(pIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, mBuilder.build());