能否动态更改状态栏图标(通知图标)?

5
我有一个Android应用程序,其中有很多活动。
在我的应用程序的登录活动中,我启动了状态栏中的通知图标,并且它固定在那里直到我的应用程序停止。好的,它有效。
但现在我需要更多的东西,我需要使用我的应用程序的服务动态地编程更改图标。我该怎么做?
我如何访问我的应用程序的通知图标,然后更改图标?
我会感激代码示例来说明如何实现这一点。
2个回答

8
您可以在通知中使用iconLevel属性: http://developer.android.com/guide/topics/ui/notifiers/notifications.html#More 在res/drawable/目录下创建一个名为myicon.xml的xml文件,并在其中设置不同的级别(即,不同的图标): 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>

可以使用以下方式设置或更新级别:

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

这个回答更加完整,可以说是“更正确”的答案,也是我使用并验证过的。 - Josh

8

只需在NotificationManager上再次调用notify(),并使用与第一个相同的唯一ID发送新的Notification即可。它将替换现有Notification的图标(或者如果用户清除了第一个,则显示新的Notification)。


它不起作用,我正在做它,但通知栏没有更新,它仍然显示相同的文本和图标:S - NullPointerException
我该如何取消该服务上的原始通知? - NullPointerException
但我现在有另一个问题... 它只显示新的tickerText一次,然后再也不显示了。 为什么? - NullPointerException
tickerText 是出现在状态栏图标右侧两到三秒钟的文本。 - NullPointerException
1
@AndroidUser99: 如果你对一个已存在的“通知(Notification)”进行“notify()”操作,它不会重新显示滚动文本。如果你需要滚动文本再次显示,你需要先使用“cancel()”取消该“通知”,然后再次进行“notify()”操作。 - CommonsWare
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接