startForeground中的错误通知:Android 2.3.4上的contentIntent必需错误

时间:2013-10-02 23:31:04

标签: java android android-service android-notifications

我有Service我希望在startForeground()函数中使用public void putServiceToForeground() { if (notif == null) { notif = new NotificationCompat.Builder(this) .setContentTitle("Location Updates Service") .setContentText("Getting Location Updates") .setSmallIcon(R.drawable.ic_launcher) .setTicker(getText(R.string.location_service_starting)) .build(); } startForeground(notificationID, notif); } public void removeServiceFromForeground() { if (notif != null && mNotificationManager != null) { notif.tickerText = getText(R.string.location_service_stopping); mNotificationManager.notify(notificationID, notif); } stopForeground(true); }

onConnected()

我在onDisconnected()的{​​{1}}和Service方法中启动并停止此操作。

在较新的Android版本中,一切都很好,我没有错误,但在2.3.4中我收到错误:

FATAL EXCEPTION: main
android.app.RemoteServiceException: Bad notification for startForeground:
java.lang.IllegalArgumentException: contentIntent required: pkg=com.mycomp.app id=678567400 
notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x40)

在阅读SO之后,我假设我需要在用户点击通知时提供contentIntent吗?这是正常的设置在Service内吗?我不能将用户返回到我的主Activity吗?

2 个答案:

答案 0 :(得分:4)

  

我假设我需要在用户点击通知时提供contentIntent吗?

显然是的。我不记得尝试展示Notification sans contentIntent,但这似乎肯定是错误所暗示的。

  

在我的服务中设置是否正常?

通常,您提供contentIntent以允许用户对Notification采取行动。在startForegound()的情况下,它应该引导用户控制服务行为的地方(例如,停止音乐播放器服务)。

  

我不能将用户返回到我的主要活动吗?

无论你的船漂浮在哪里,让你的用户感到高兴,不一定是重要的。

答案 1 :(得分:0)

您不应尝试启动活动或从服务转到任何活动。通常,除非将startActivity或startActivityForResult从一个Activity调用到另一个Activity,否则不应尝试启动Activity。此外,除非用户要求启动,否则不应尝试启动另一个Activity。您不希望在不允许用户控制其工作流程的情况下推动用户;它是一个用户体验模型,会让用户讨厌你。

这就是通知和PendingIntents存在的原因。当您的服务中的某些内容需要用户注意时,请发布通知。当用户准备好处理该情况时,他或她可以单击该通知以返回到您应用中的活动。如果用户在发布通知时处于其他任务的中间,则允许用户完成工作。

startForeground()用于将服务置于“高”优先级,系统将避免停止它。它用于运行音乐播放器等服务,用户希望服务在大多数情况下继续运行。 startForeground()需要通知,因为规则是如果不以某种方式通知用户持久消息,则无法运行前台服务。 在过去,一些开发人员通过一个技巧解决了这个通知要求:他们提供了一个没有图标的通知。系统不显示没有图标的通知,因此前台服务是“隐藏”的。这个洞已经填满;如果您尝试使用提供给startForeground()的通知执行此操作,系统将为您提供一个图标。