startForeground()不显示我的通知

Dmi*_*ank 48 service android foreground

我想让我Service在前台跑步.我尝试使用此示例(请查看" 在前台运行服务 "部分),但startForeground()实际上并未显示我的通知.并没有抛出异常.为了使它显示,我需要使用NotificationManager这里解释的那样.随着NotificationManager我的通知工作,但我不确定我Service的前景是在这个"无声"呼叫之后startForeground().

有什么不对?

编辑:我刚刚测试了这个应该演示的示例项目startForeground(),但它不起作用!我使用API​​ v7.0,我在模拟器和真实设备(SE Xperia Neo)上测试了它.通知不会出现.

EDIT2:如果我试着打电话,setForeground()那我就收到了警告setForeground: ignoring old API call.

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

小智 124

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

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

startForeground(1, notification); // Works!!!
Run Code Online (Sandbox Code Playgroud)

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

  • 我有**123**没有工作,改为1,它的工作原理! (13认同)
  • 然而,文档对这个id值甚至是什么感到非常模糊......我对(IMO)糟糕的文档感到非常沮丧-_- (7认同)
  • @HerrGrumps文档已更新,现在有一个警告:"你给startForeground()的整数ID不能为0." (developer.android.com/guide/components/services.html).晚于永远= P更好 (4认同)
  • 哇,这是一个惊喜.为我修好了.谢谢! (2认同)
  • 哇机器人欢笑:) (2认同)
  • 不要使用像1337,13377331,137这样的大整数.只需使用0x3,0x1 (2认同)

Sha*_*haw 30

除了最好的答案.你还应该检查一下你打过电话setSmallIcon.在我的Android手机上,如果不打电话,我无法得到我的预期setSmallIcon

  • 也为我工作过 (2认同)
  • 谢谢你。服务文档中没有按照要求提到这一点,但肯定应该提到! (2认同)
  • +1这个答案非常有用,我花了一整天的时间试图弄清楚为什么愚蠢的通知没有正常运行...... (2认同)
  • 这也是我的问题;如果没有“setSmallIcon”,通知只是说“<应用程序名称>正在运行”。感谢您为我节省了时间和痛苦! (2认同)