Подтвердить что ты не робот

StartForeground() не показывает мое уведомление

Я пытаюсь сделать мой Service запущенным на переднем плане. Я попытался использовать этот пример (см. Раздел "Запуск службы на переднем плане" ), но startForeground() на самом деле не показывает мои уведомление. И никаких исключений не бросают. Чтобы показать это, мне нужно использовать NotificationManager как здесь. С NotificationManager мое уведомление работает, но я не уверен, что мой Service является передним планом после этого "бесшумного" вызова startForeground().

Что может быть неправильным?

EDIT: я просто протестировал этот образец проекта, который должен продемонстрировать startForeground(), но он не работает! Я использую API v7.0, я тестировал его как на эмуляторе, так и на реальном устройстве (SE Xperia Neo). Уведомление не появляется.

EDIT2: если я попытаюсь позвонить setForeground(), тогда я получил предупреждение setForeground: ignoring old API call.

Я также попытался использовать startForegroundCompat(), как описано здесь, но эффект абсолютно то же самое. Я проверяю, является ли мой сервис приоритетным, используя ActivityManager.RunningServiceInfo, как описано здесь, и я вижу, что мой сервис не на переднем плане.

4b9b3361

Ответ 1

Я только заметил, что startForeground() не показывает значок уведомления, если для параметра id установлено значение 0...

startForeground(0, notification); // Doesn't work...

startForeground(1, notification); // Works!!!

Я надеюсь, что это может помочь кому-то застрять в этом.

Ответ 2

в дополнение к лучшему ответу. вы также должны проверить, что вы вызвали setSmallIcon. На моем телефоне Android я не могу получить то, что ожидаю, не вызывая setSmallIcon

Ответ 3

ДМИТРИЙ. Я только что понес свою проблему и нашел причину.

Если ваше приложение меняет состояние COMPONENT PackageManager.setComponentEnabledSetting()) Android удаляет службу из foregraound и ее значка уведомлений.

Ошибка, сообщенная в ноябре 2011 года

Ответ 4

Это может быть старый поток, но я хотел бы добавить то, что я только что узнал, о котором еще не сказано:

Возможно, что a Service все еще жив после вызова stopSelf(), потому что есть Activity, привязанные к Service. По сути, startForeground() просто не собирается показывать уведомление и не дает никаких исключений в этом случае.

Ответ 5

Является ли ваша служба запущенной службой или связанной службой? У меня была такая же проблема со связанной службой, но, начиная службу до привязки, мне разрешалось вызывать startForeground(int, notification) с уведомлением о появлении.