startForeground()不显示我的通知

时间:2012-01-04 11:15:03

标签: android service foreground

我正在尝试让Service在前台运行。我尝试使用this example(请查看“在前台运行服务”部分),但startForeground()实际上并未显示我的通知。并没有抛出异常。为了展示它,我需要使用NotificationManager来解释here。使用NotificationManager我的通知有效,但在Service此“无声”通话后,我不确定我的startForeground()是前景。

有什么不对?

编辑:我刚测试this sample project应该展示startForeground(),但它不起作用!我使用API​​ v7.0,我在模拟器和真实设备(SE Xperia Neo)上测试了它。通知没有出现。

EDIT2 :如果我尝试拨打setForeground(),我会收到警告setForeground: ignoring old API call

我也尝试使用here描述的startForegroundCompat(),但效果绝对相同。我按照here所述使用ActivityManager.RunningServiceInfo检查我的服务是否为前台,我发现我的服务是前景。

6 个答案:

答案 0 :(得分:118)

我刚注意到,如果startForeground()参数设置为id,则0不会显示通知图标...

startForeground(0, notification); // Doesn't work...

startForeground(1, notification); // Works!!!

我希望它可以帮助有人坚持这一点。

答案 1 :(得分:27)

除了最佳答案。 您还应该检查是否已拨打setSmallIcon。 在我的Android手机上,如果不拨打setSmallIcon

,我无法得到我的预期

答案 2 :(得分:0)

梅德。我刚刚遇到了你的问题并找到了原因。

如果您的应用正在更改COMPONENT的状态PackageManager.setComponentEnabledSetting()) Android会从foregraound及其通知图标中删除该服务。

Bug reported at Nov, 2011

答案 3 :(得分:0)

这可能是一个旧线程,但我想补充我刚刚学到的尚未提及的内容:

调用ServicestopSelf()可能仍然有效,因为有Activity绑定到Service。事实上,在这种情况下,startForeground()不会显示通知,也不会给出任何例外。

答案 4 :(得分:0)

您的服务是启动服务还是绑定服务?我对绑定服务有同样的问题,但在绑定之前启动服务允许我调用startForeground(int, notification)并显示通知。

答案 5 :(得分:0)

在我的情况下,

在调用startForeground(...)之后没有任何通知,因为我仅使用.setSubText(...)来设置它的消息(因为它在大多数设备上都是用较小的字体呈现的)。但是,如果您未使用.setContentText(...)设置消息,则某些设备Xiaomi Redmi Note 4将不会显示任何通知。

希望对某人有帮助