2011-01-21 17 views
5

Mam aplikację na Androida, z wieloma funkcjami.Czy można dynamicznie zmieniać ikonę paska stanu (ikona powiadomienia)?

W aktywacji logowania mojej aplikacji uruchamiam ikonę powiadomienia na pasku stanu i jest ona tam ustawiana, dopóki moja aplikacja się nie zatrzyma. Ok, to działa.

Ale teraz potrzebuję jeszcze jednej rzeczy, muszę zmienić ikonę dynamicznie, programowo, z usługą mojej aplikacji. Jak mogę to zrobić?

W jaki sposób mogę uzyskać dostęp do ikony powiadomienia w mojej aplikacji, a następnie zmienić ikonę?

Byłbym wdzięczny za przykłady kodu ilustrujące, jak to osiągnąć.

Odpowiedz

8

Po prostu zadzwoń notify() ponownie pod numer notify() ponownie pod numerem NotificationManager z nowym numerem Notification, ale o tym samym unikalnym identyfikatorze, co w przypadku pierwszego. Zastąpi ona ikonę istniejącego Notification (lub wyświetli nową Notification, jeśli użytkownik wyczyści pierwszą).

+0

to nie działa, im to zrobić, ale pasek powiadomień nie upda tes, nadal pokazuje ten sam tekst i ikonę: S – NullPointerException

+0

@ AndroidUser99: OK, następnie anuluj() oryginalne powiadomienie i podnieś nowe. – CommonsWare

+0

Jak mogę anulować pierwotne powiadomienie w tej usłudze? – NullPointerException

7

Można użyć iconLevel na zgłoszenia: http://developer.android.com/guide/topics/ui/notifiers/notifications.html#More

Utwórz plik xml w res/odkształcalne/myicon.xml z innym poziomie (inna ikona) 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> 

i ustawić lub (aktualizacja) poziom z:

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

To jest naprawdę bardziej kompletna i prawdopodobnie "bardziej poprawna" odpowiedź niż zaakceptowana, a także to, czego użyłem i zweryfikowałem. – Josh

Powiązane problemy