Actualizar una notificación en curso en silencio
Tengo un servicio que se conecta a otros dispositivos de forma inalámbrica. Cuando el servicio está habilitado, tengo una notificación en curso que indica que está habilitada.
Una vez habilitado el servicio, el usuario se conecta a otro dispositivo. En este momento, me gustaría actualizar mi notificación en curso para indicar el nombre del dispositivo al que se ha conectado. Esto es bastante fácil de hacer llamando a startForeground(ONGOING_NOTIFICATION, notification)
nuevo con la información actualizada; Sin embargo esto parpadea la notificación en la barra cada vez que se llama. Lo que realmente me gustaría es la notificación para actualizar en silencio en segundo plano sin parpadear en la barra de notificación para que el usuario no sabe la diferencia hasta que él o ella abre el área de notificación a buscar.
- Android: actualización de la barra de progreso de la notificación, correctamente
- ¿Cómo utilizar Glide en remoteViews?
- Notificación ampliable android 4.1
- SetLatestEventInfo () no se puede resolver en Android Studio
- Notificaciones push en android 2.3 se estrelló.
¿Hay alguna manera de actualizar la notificación sin llamar a startForeground()
?
Este comportamiento sólo se produce en Honeycomb. Los dispositivos de pan de jengibre (y supongo que Froyo, etc.) se comportan de la manera deseada.
- Mostrar siempre servicio en la barra de notificación
- Notificación múltiple de Android
- Notificación de cancelación automática no funciona para Android Lollipop
- En Android (en JB), ¿cómo puedo añadir una acción a una notificación personalizada rica?
- Notificación de notificación de vibración / tono de llamada
- Cómo crear una notificación en la barra de estado mediante un mensaje de teléfono
- ContentObservers son inútiles
- El objetivo de la actividad de Android permanece después del apagado
Debe actualizar la notificación existente http://developer.android.com/guide/topics/ui/notifiers/notifications.html#Updating
Yo también experimentado este problema, y con la ayuda de comentarios anteriores y un poco de excavación he encontrado la solución.
Si no desea que las notificaciones parpadeen al actualizarse o que continúe la barra de estado del dispositivo, debe:
- Utilice setOnlyAlertOnce (true) en el constructor
- Utilice SAME Builder para cada actualización.
Si usted utiliza un nuevo constructor cada vez, entonces estoy adivinando Android tiene que reconstruir la vista de nuevo haciendo que desaparezca brevemente.
Un ejemplo de un buen código:
class NotificationExample extends Activity { private NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); private mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //Different Id's will show up as different notifications private int mNotificationId = 1; //Some things we only have to set the first time. private boolean firstTime = true; private updateNotification(String message, int progress) { if (firstTime) { mBuilder.setSmallIcon(R.drawable.icon) .setContentTitle("My Notification") .setOnlyAlertOnce(true); firstTime = false; } mBuilder.setContentText(message) .setProgress(100, progress, true); mNotificationManager.notify(mNotificationId, mBuilder.build()); } }
Con el código anterior, puede llamar a updateNotification (String, int) con un mensaje y progreso (0-100) y actualizará la notificación sin molestar al usuario.
Esto funcionó para mí, por lo que una notificación de actividad en curso (no de SERVICIO) se actualiza "silenciosamente".
NotificationManager notifManager; // notifManager IS GLOBAL note = new NotificationCompat.Builder(this) .setContentTitle(YOUR_TITLE) .setSmallIcon(R.drawable.yourImageHere); note.setOnlyAlertOnce(true); note.setOngoing(true); note.setWhen( System.currentTimeMillis() ); note.setContentText(YOUR_MESSAGE); Notification notification = note.build(); notifManager.notify(THE_ID_TO_UPDATE, notification );
Prueba esto
int id = (int) Calendar.getInstance().getTimeInMillis();
Utilice este identificador en el método notify (). El tiempo de su sistema Android crea un ID único