Notificación Heads-up - Android Lollipop


Estoy tratando de mostrar un aviso de tipo notificación, pero no pude. Lo que he intentado

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 icono en la barra. Estoy usando API 21 en API 21 emulador (no L vista previa) He intentado:
android:Theme.Holo.NoActionBar,
android:Theme.Holo.NoActionBar.Fullscreen
y NotificationCompat.Builder

Los ejemplos de SDK no están disponibles. ¿alguien sabe cómo hacerlo?

Lo hice funcionar añadiendo:

.setDefaults(Notification.DEFAULT_VIBRATE)

Es esta la mejor manera?

Author: Iain Smith, 2014-10-19

7 answers

De acuerdo con las Notificaciones , debe configurar una vibración o un tono de llamada para que el Heads-up funcione. Sin embargo, aquí hay un truco rápido que no requiere permiso de VIBRACIÓN para producir 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 heads-up. Ver aquí para saber cuándo usar la notificación heads-up:

MAX: Para notificaciones críticas y urgentes que alertan al usuario de una condición que es crítica en el tiempo o que debe resolverse antes pueden continuar con una tarea en particular.

ALTA: Principalmente para comunicación importante, 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 heads-up.

 76
Author: Mygod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-03 07:06:59

Según Google: https://developer.android.com/design/patterns/notifications.html

Si la prioridad de una notificación se marca como Alta, Máxima o a pantalla completa, recibe una notificación heads-up.

Así que el siguiente código debería generar una notificación heads-up:

.setPriority(Notification.PRIORITY_MAX)

Debería ser suficiente. Pero aparentemente el .setDefaults(Notificación.DEFAULT_VIBRATE) tiene que ser establecido también. Esperemos que Google solucione esto en su versión final de Android 5.0.

No estoy seguro si es un error o característica...

 15
Author: MLS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-22 08:57:14

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 establecer:

.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 el lugar donde 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. Usted puede elegir de la los siguientes niveles de prioridad al publicar una notificación:

MAX Se usa para notificaciones críticas y urgentes que alertan al usuario de una condición que es crítica en el tiempo o que debe resolverse antes pueden continuar con una tarea en particular.

ALTO Utilizar principalmente para la comunicación importante, tales como mensajes o eventos de chat con contenido que es particularmente interesante para el usuario. Las notificaciones de alta prioridad activan la notificación heads-up Mostrar.

DEFAULT Use para todas las notificaciones que no entran en ninguna de las otras prioridades descritas aquí y si la aplicación no priorizar sus propias notificaciones

LOW Use para notificaciones de las que desea 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 los convierte en una buena opción para cosas como actualizaciones sociales públicas o no dirigidas: El usuario tiene se le pidió ser notificado sobre ellos, pero estas notificaciones nunca deben tomar prioridad sobre la comunicación urgente o directa.

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

 7
Author: Jorgesys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-07 16:26:00

Para establecer la prioridad , use la función setPriority (introducida en la API 16) junto con setDefaults (agregada en la API 11) de Notification Builder. Elija la prioridad PREDETERMINADA, ALTA, BAJA, MÁXIMA, MÍNIMA según los requisitos 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)
 5
Author: unixia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-04 07:39:39

Debe establecer alta prioridad y utilizar tonos de llamada 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 (nivel de API 21), las notificaciones pueden aparecer en ventana flotante (también llamada notificación heads-up) cuando el dispositivo está activo (es decir, el dispositivo está desbloqueado y su pantalla está encendida). Estas notificaciones parecen similares a la forma compacta de su notificación, excepto que la notificación heads-up también muestra la acción botón. Los usuarios pueden actuar en, o descartar, una notificación heads-up sin salir de la aplicación actual.

Ejemplos de condiciones que pueden desencadenar notificaciones heads-up incluir:

  • La actividad del usuario está en modo de pantalla completa (la aplicación utiliza fullScreenIntent), o
  • La notificación tiene alta prioridad y utiliza tonos de llamada o vibraciones
 1
Author: situee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-19 02:59:32

Agregue esta línea en su código para mostrar la notificación heads up solo funciona para la versión Lollipop

notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
 0
Author: Amit Desale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-10 09:27:25

Para dispositivos que ejecutan Android 8.0 (nivel de API 26) y versiones posteriores, el canal de notificación requiere una gran importancia

new NotificationChannel("ID", "Channel Name", NotificationManager.IMPORTANCE_HIGH);
 0
Author: Megaetron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-14 16:47:18