2011-01-21 12 views
5

Ho un'APP Android, con molte attività.È possibile modificare dinamicamente l'icona della barra di stato (icona di notifica)?

Nell'attivazione di accesso della mia app, avvio un'icona di notifica nella barra di stato, ed è fissata lì finché la mia app non si ferma. Ok, funziona.

Ma ora ho bisogno di un'altra cosa, ho bisogno di cambiare l'icona in modo dinamico, programmatico, con un servizio della mia app. Come posso farlo?

Come posso accedere all'icona di notifica della mia app e quindi modificare l'icona?

Gradirei esempi di codice per illustrare come ottenere ciò.

risposta

8

Basta chiamare il notify() di nuovo su NotificationManager con un nuovo Notification ma lo stesso ID univoco utilizzato per il primo. Sostituirà l'icona dello Notification esistente (o visualizzerà il nuovo Notification se l'utente ha cancellato il primo).

+0

non funziona, sto facendo ma la barra di notifica non funziona tes, mostra ancora lo stesso testo e l'icona: S – NullPointerException

+0

@ AndroidUser99: OK, quindi annulla() la notifica originale e solleva quella nuova. – CommonsWare

+0

come posso cancellare la notifica originale su quel servizio? – NullPointerException

7

È possibile utilizzare l'iconLevel sulla notifica: http://developer.android.com/guide/topics/ui/notifiers/notifications.html#More

Creare un file XML in res/drawable/myicon.xml con diverso livello (icona diversa) 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> 

e impostare o (aggiorna) il livello con:

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

Questa è davvero una risposta più completa, e probabilmente più "corretta" rispetto a quella accettata, e ciò che ho usato e verificato per funzionare. – Josh

Problemi correlati