2

我有一个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()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在用户点击通知时提供一个 for?这在我的范围内设置是否正常Service?我不能将用户返回到我的 mainActivity吗?

4

2 回答 2

4

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

显然是的。我不记得尝试显示Notificationsans contentIntent,但这似乎是错误所暗示的。

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

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

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

无论是什么让您的船漂浮并使您的用户满意,不一定按重要性顺序排列。

于 2013-10-02T23:40:02.517 回答
0

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

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

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

于 2013-10-03T01:13:21.323 回答