我正在尝试让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
检查我的服务是否为前台,我发现我的服务是不前景。
答案 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及其通知图标中删除该服务。
答案 3 :(得分:0)
这可能是一个旧线程,但我想补充我刚刚学到的尚未提及的内容:
调用Service
后stopSelf()
可能仍然有效,因为有Activity
绑定到Service
。事实上,在这种情况下,startForeground()
不会显示通知,也不会给出任何例外。
答案 4 :(得分:0)
您的服务是启动服务还是绑定服务?我对绑定服务有同样的问题,但在绑定之前启动服务允许我调用startForeground(int, notification)
并显示通知。
答案 5 :(得分:0)
在调用startForeground(...)
之后没有任何通知,因为我仅使用.setSubText(...)
来设置它的消息(因为它在大多数设备上都是用较小的字体呈现的)。但是,如果您未使用.setContentText(...)
设置消息,则某些设备Xiaomi Redmi Note 4将不会显示任何通知。
希望对某人有帮助