4

我确实有一个在前台启动的服务:

val notification = NotificationCompat.Builder(context)
    .setSmallIcon(R.drawable.ic_stat_notify)
    .setContentTitle(title)
    .setTicker(message)
    .setStyle(NotificationCompat.BigTextStyle().bigText(message))
    .setContentText(message)
    .setContentIntent(pendingIntent)
    .build()
startForeground(Notifications.Id.RUNNING, notification)

请注意,我没有使用setOngoing(true).

我在 StackOveflow 上找到了一些示例和答案,有些人正在使用setOngoing(true),有些人没有。例子:

此外,Android 文档说

前台服务是用户主动了解的服务,并且不是系统在内存不足时终止的候选服务。前台服务必须为位于 Ongoing 标题下的状态栏提供通知。这意味着除非服务停止或从前台删除,否则通知不能被解除

而且,在文档中,setOngoing(true)没有设置:

Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent =
        PendingIntent.getActivity(this, 0, notificationIntent, 0);

Notification notification =
          new Notification.Builder(this, CHANNEL_DEFAULT_IMPORTANCE)
    .setContentTitle(getText(R.string.notification_title))
    .setContentText(getText(R.string.notification_message))
    .setSmallIcon(R.drawable.icon)
    .setContentIntent(pendingIntent)
    .setTicker(getText(R.string.ticker_text))
    .build();

startForeground(ONGOING_NOTIFICATION_ID, notification);

问题

省略的影响是setOngoing(true)什么?

4

1 回答 1

4

当您启动服务并在前台运行它时startForeground(int, Notification),您传递的通知是标志FLAG_FOREGROUND_SERVICE(请参见此处)。

然后,在您的通知实际发布到状态栏之前NotificationManagerService检查是否FLAG_FOREGROUND_SERVICE已设置,如果已设置,它将添加标志FLAG_ONGOING_EVENT(请参见此处),这与您手动使用时将设置的标志相同setOngoing(true)(请参见此处)。

于 2018-01-10T12:26:29.433 回答