Android:通知没有图标

13

我想创建一个不带图标的通知,出现在状态栏中(展开后的状态)。我尝试使用自定义扩展视图,并仅为此视图设置图标。但是它没有成功。当我将构造函数的图标参数设置为0时,图标消失了,但通知也没有出现在扩展视图中。

Notification notification = new Notification(0, "", 0);

我尝试了很多组合,但没有找到解决方案。顺便说一下,我知道这个功能在一些应用程序中可以使用。谢谢。


如果你展示一个空的通知栏,用户为什么会去展开它呢? - molnarm
用户将始终知道它在那里为其服务,但不会被图标打扰。 - Ömer
4个回答

25

在 Android 4.1 中,这是可以实现的;Jelly Bean 状态栏的参考实现将会隐藏 PRIORITY_MIN 通知的图标,但它们的内容仍会显示在通知面板中。


6

QuickSettings就是这样做的,当我看到那段代码时,我发现它使用了Notification的默认构造函数,并将其图标推到通知栏的右侧。我认为它仍然使用空间但没有图标。

一些代码:

notification = new Notification();
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_NO_CLEAR;
long hiddenTime = Constants.SDK_VERSION >= 9 ? -Long.MAX_VALUE : Long.MAX_VALUE;
notification.when = visible ? System.currentTimeMillis() : hiddenTime; // align
// left (0) / right (max) in status bar

编辑:抱歉,我错过了一行重要的代码,实际上他使用了一个占位符。但现在你有一些代码了 ;-)

notification.icon = visible ? (status == Constants.STATUS_BLACK_ICON ? 
                            R.drawable.ic_logo_black : R.drawable.ic_logo_white)
                            : R.drawable.ic_placeholder;

http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/src/com/bwx/bequick/receivers/StatusBarIntegrationReceiver.java


一个聪明的技巧实际上。谢谢 :) - Ömer
@ludwigm,QuickSettings 代码不再可用,你能进一步解释一下解决方案吗?我并没有完全理解事情是如何运作的。 - Efi MK
1
在这里找到源代码 - http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com/bwx/bequick/receivers/StatusBarIntegrationReceiver.java.htm - Efi MK
1
这也挂了,这里找到了一份副本:https://github.com/yanchenko/quick-settings/blob/master/src/com/bwx/bequick/receivers/StatusBarIntegrationReceiver.java - arne.jans

0
您可以使用透明图像作为通知图标。但正如molnarm已经提到的那样,用户不会被通知有新的通知。

这是不可能的,即使您提供了一个1像素尺寸的图标。它会保留应该有的内容并显示为白色。 - Ömer
我只是不想在那里保留一个区域。它可以是黑色、白色或透明的,都无所谓。 - Ömer

0

这里有一个可以尝试的东西。两次发出通知,一次使用icon=0,另一次使用真正的图标。先尝试一种顺序,然后再尝试相反的顺序。

我做了类似于这样的事情,得到了在状态栏中没有通知,在扩展列表中有通知的效果,除了其中之一(使用icon=0的那个)是由Service.startForeground()发出的。我现在没有时间进行更多的实验。


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