Как создать уведомление для службы переднего плана с настроенными данными? - PullRequest
0 голосов
/ 28 сентября 2018

Передо мной стоит небольшая дилемма с новыми требованиями к обслуживанию переднего плана, представленными в 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().

Теперь, как правильно подходить к проблеме содержимого динамического уведомления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...