如何使用自定义数据为前台服务创建通知?

时间:2018-09-28 11:21:11

标签: android android-service android-notifications

我面临Android O中引入的新前台服务要求的困境。

我有一个前台服务,它在onCreate()期间创建前台通知,如下所示:

public class FooService extends Service {
    @Override
    public void onCreate() {
        NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        nm.createNotificationChannel(new NotificationChannel("channel", "channel", IMPORTANCE_LOW));

        startForeground(42, new NotificationCompat.Builder(this, "channel")
                .setContentTitle("Foo")
                .setContentText("Bar")
                .setOngoing(true)
                .setSmallIcon(android.R.drawable.ic_popup_sync)
                .build());
    }
}

但是,出现一个问题:如果我需要动态地将数据传递到通知,该怎么办?设置格式标题?像这样:

startForeground(42, new NotificationCompat.Builder(this, "channel")
        .setContentTitle(getString(R.string.formatted_title, intent.getStringExtra("Foobar")))
        ...

由于没有意图传递给onCreate(),因此没有惯用的方法将参数传递给通知。有一种方法onStartCommand()可以将意图用作参数,但是有一个陷阱:startForeground()必须在启动服务的五秒钟内调用,但是不能保证onStartCommand()被调用在达到五秒限制之前。我已经尝试了一段时间,大约有10%的时间会发生这种情况。唯一的方法似乎是在startForeground()期间调用onCreate()

现在,解决动态通知内容问题的正确方法是什么?

0 个答案:

没有答案