Notificación Heads-up – Android Lollipop

Intento mostrar un aviso de tipo aviso pero no pude. Lo que probé

final Notification.Builder notif = new Builder(getApplicationContext()) .setContentTitle(getString(R.string.title)) .setContentText(getString(R.string.text)) // .setTicker(getString(R.string.tick)) removed, seems to not show at all // .setWhen(System.currentTimeMillis()) removed, match default // .setContentIntent(contentIntent) removed, I don't neet it .setColor(Color.parseColor(getString(R.color.yellow))) //ok .setSmallIcon(R.drawable.ic_small) //ok .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) // .setCategory(Notification.CATEGORY_CALL) does not seem to make a difference .setPriority(Notification.PRIORITY_MAX); //does not seem to make a difference // .setVisibility(Notification.VISIBILITY_PRIVATE); //does not seem to make a difference mNotificationManager.notify(Constants.NOTIFICATION_ID, notif.build()); 

La notificación se muestra solo como un ícono en la barra. Estoy usando API 21 en emulador API 21 (no en la vista previa L) He intentado:
android:Theme.Holo.NoActionBar ,
android:Theme.Holo.NoActionBar.Fullscreen
y NotificationCompat.Builder

Los ejemplos de SDK no están disponibles. ¿Alguien sabe como hacerlo?

Lo hice funcionar agregando:

 .setDefaults(Notification.DEFAULT_VIBRATE) 

¿Es esta la mejor manera?

De acuerdo con Notificaciones , se requiere que establezca un tono de llamada o vibración para que Heads-up funcione. Sin embargo, aquí hay un truco rápido que no requiere el permiso VIBRATE para generar una notificación head-up:

 notificationBuilder.setPriority(Notification.PRIORITY_HIGH); if (Build.VERSION.SDK_INT >= 21) notificationBuilder.setVibrate(new long[0]); 

EDITAR:

No abuse de la notificación de mano a mano. Consulte aquí para saber cuándo usar la notificación de mano a mano:

MAX: para notificaciones críticas y urgentes que alertan al usuario sobre una condición que es crítica en el tiempo o necesita ser resuelta antes de que pueda continuar con una tarea en particular.

ALTO: Principalmente para comunicaciones importantes, como mensajes o eventos de chat con contenido que es particularmente interesante para el usuario. Las notificaciones de alta prioridad activan la visualización de notificaciones de heads-up.

De acuerdo con Google: https://developer.android.com/design/patterns/notifications.html

Si la prioridad de una notificación está marcada como Alta, Máx. O Pantalla completa, recibe una notificación de alerta.

Entonces, el siguiente código debería generar una notificación de mano a mano:

 .setPriority(Notification.PRIORITY_MAX) 

Debería ser suficiente. Pero aparentemente el .setDefaults (Notification.DEFAULT_VIBRATE) tiene que establecerse también. Con suerte, Google arreglará esto en su versión final de Android 5.0.

No estoy seguro de si el error o característica …

Todas mis aplicaciones no muestran la notificación, por ejemplo, tengo un Nexus 6 con Android 5.1.1, pero creo que esto es un issuse desde Android 5.0, tuve que configurar:

 .setPriority(Notification.PRIORITY_HIGH) 

Establecer y administrar correctamente la prioridad de notificación

Android admite un indicador de prioridad para las notificaciones. Este indicador le permite influir en dónde aparece su notificación, en relación con otras notificaciones, y ayuda a garantizar que los usuarios siempre vean primero sus notificaciones más importantes. Puede elegir entre los siguientes niveles de prioridad al publicar una notificación:

MAX Se usa para notificaciones críticas y urgentes que alertan al usuario sobre una condición que es crítica en el tiempo o necesita ser resuelta antes de que pueda continuar con una tarea en particular.

ALTO Usar principalmente para comunicaciones importantes, como eventos de mensajes o chat con contenido que sea particularmente interesante para el usuario. Las notificaciones de alta prioridad activan la visualización de notificaciones de heads-up.

PREDETERMINADO Se usa para todas las notificaciones que no entran en ninguna de las otras prioridades descritas aquí y si la aplicación no prioriza sus propias notificaciones

BAJO Use para notificaciones sobre las que desee que se informe al usuario, pero que son menos urgentes. Las notificaciones de baja prioridad tienden a aparecer en la parte inferior de la lista, lo que las convierte en una buena opción para cosas como actualizaciones sociales públicas o no dirigidas: el usuario ha solicitado que se le notifique, pero estas notificaciones nunca deben tener prioridad sobre las urgentes o comunicación directa.

MIN Usar para información contextual o de fondo, como información meteorológica o información de ubicación contextual. Las notificaciones de prioridad mínima no aparecen en la barra de estado. El usuario los descubre al expandir el tono de notificación.

Para establecer la prioridad , use la función setPriority (introducida en API 16) junto con setDefaults (agregados en la API 11) del Notification Builder . Elija la prioridad PREDETERMINADA , ALTA, BAJA, MÁXIMA, MINA según el requisito de su aplicación. Los valores predeterminados también se pueden elegir aquí .

Un pequeño fragmento:

 notification = NotificationBuilder(service) notification.setPriority(Notification.PRIORITY_MAX) notification.setDefaults(Notification.DEFAULT_ALL) 

Debe establecer alta prioridad y usar tonos de timbre o vibraciones.

 notificationBuilder.setDefaults(Notification.DEFAULT_ALL); notificationBuilder.setPriority(Notification.PRIORITY_HIGH); 

Ref: https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up

Notificaciones Heads-up

Con Android 5.0 (API de nivel 21), las notificaciones pueden aparecer en una pequeña ventana flotante (también llamada notificación de mano a mano) cuando el dispositivo está activo (es decir, el dispositivo está desbloqueado y su pantalla está encendida). Estas notificaciones son similares a la forma compacta de su notificación, excepto que la notificación de mano a mano también muestra botones de acción. Los usuarios pueden actuar sobre, o descartar, una notificación de mano a mano sin salir de la aplicación actual.

Entre los ejemplos de condiciones que pueden desencadenar las notificaciones heads-up se incluyen:

  • La actividad del usuario está en modo de pantalla completa (la aplicación usa fullScreenIntent), o
  • La notificación tiene alta prioridad y usa tonos de timbre o vibraciones

Agregue esta línea en su código para mostrar la notificación de notificaciones directas, solo funciona para la versión de Lollipop

 notificationBuilder.setPriority(Notification.PRIORITY_HIGH); 

Para dispositivos con Android 8.0 (nivel de API 26) y superior, el canal de notificación requiere una gran importancia

 new NotificationChannel("ID", "Channel Name", NotificationManager.IMPORTANCE_HIGH);