studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android notifications android-3.0-honeycomb

para - manual de programacion android pdf



Actualización de una notificación en curso en voz baja (4)

Debe actualizar la notificación existente https://developer.android.com/training/notify-user/build-notification.html#Updating

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á habilitado.

Después de habilitar el servicio, el usuario se conecta a otro dispositivo. En este punto, 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) nuevamente con la información actualizada; sin embargo, esto destella la notificación en la barra cada vez que se llama. Lo que realmente me gustaría es que la notificación se actualice silenciosamente en segundo plano sin parpadear en la barra de notificaciones para que el usuario no sepa la diferencia hasta que abra el área de notificación para mirar.

¿Hay alguna forma de actualizar la notificación sin llamar a startForeground() ?

Este comportamiento solo ocurre en Honeycomb. Los dispositivos de pan de jengibre (y supongo que Froyo, etc.) se comportan de la manera deseada.


Esto funcionó para mí, por lo que una notificación de actividad en curso (no 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 ID en el método de notificación (). El tiempo de su propio sistema Android crea una ID única


Yo también experimenté este problema, y ​​con la ayuda de comentarios anteriores y un poco de investigación he encontrado la solución.

Si no desea que las notificaciones parpadeen cuando se actualizan, o para enganchar continuamente la barra de estado del dispositivo, debe:

  • Use setOnlyAlertOnce (verdadero) en el constructor
  • Utilice el mismo generador para cada actualización.

Si utilizas un nuevo constructor cada vez, supongo que Android tiene que reconstruir la vista de nuevo y hacer 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, simplemente puede llamar a updateNotification (String, int) con un mensaje y progreso (0-100) y actualizará la notificación sin molestar al usuario.