2011-01-21 20 views
5

Tengo una aplicación para Android, con muchas actividades.¿Es posible cambiar el icono de la barra de estado (icono de notificación) dinámicamente?

En la actividad de inicio de sesión de mi aplicación, comienzo un ícono de notificación en la barra de estado y se fija allí hasta que se detiene mi aplicación. Ok, funciona

Pero ahora necesito una cosa más, tengo que cambiar el icono dinámicamente, programáticamente, con un servicio de mi aplicación. ¿Cómo puedo hacerlo?

¿Cómo puedo acceder al icono de notificación de mi aplicación y luego cambiar el ícono?

Agradecería ejemplos de código para ilustrar cómo lograr esto.

Respuesta

8

Simplemente llame al notify() nuevamente en NotificationManager con un nuevo Notification pero el mismo ID único que utilizó para el primero. Se reemplazará el icono de la Notification existente (o mostrar la nueva Notification si el usuario borra la primera).

+0

no funciona, lo estoy haciendo pero la barra de notificación no se actualiza tes, que sigue mostrando el mismo texto y el icono: S @ – NullPointerException

+0

AndroidUser99: OK, entonces cancelar() la notificación original y elevar la nueva. – CommonsWare

+0

¿cómo puedo cancelar la notificación original en ese servicio? – NullPointerException

7

Se podría utilizar el iconLevel en la Notificación: http://developer.android.com/guide/topics/ui/notifiers/notifications.html#More

Crear un archivo XML en res/estirable/myicon.xml con diferente nivel (icono diferente) http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html

<level-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" /> 
    <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" /> 
    <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" /> 
</level-list> 

y establecer o (actualización) el nivel con:

Notification mNotification = new Notification(icon, tickerText, when); 
mNotification.iconLevel = 1; 
mNoticationManager.notify(NOTIFICATION_ID, mNotification); 
+0

Esto es realmente una más completa, y podría decirse que "más correcto", respuesta que el aceptado uno, y lo que he utilizado y verificado el funcionamiento. – Josh

Cuestiones relacionadas