startForeground () не показывает мое уведомление - PullRequest
44 голосов
/ 04 января 2012

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

Что может быть не так?

РЕДАКТИРОВАТЬ : Я только что протестировал этот пример проекта , который должен продемонстрировать startForeground(), но он не работает! Я использую API v7.0, я тестировал его как на эмуляторе, так и на реальном устройстве (SE Xperia Neo). Уведомление не появляется.

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

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

Ответы [ 6 ]

120 голосов
/ 01 сентября 2012

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

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

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

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

27 голосов
/ 28 марта 2015

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

0 голосов
/ 07 сентября 2018

в моем случае не было уведомлений после вызова startForeground(...), потому что я использовал только .setSubText(...) для установки сообщения о нем (потому что оно отображается с меньшим шрифтом на большинстве устройств) Но некоторые устройства Xiaomi Redmi Note 4 не будут отображать никаких уведомлений, если вы не настроили сообщение с помощью .setContentText(...).

Надеюсь, что это поможет кому-то

0 голосов
/ 20 февраля 2017

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

0 голосов
/ 17 марта 2016

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

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

0 голосов
/ 09 июля 2012

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

Если ваше приложение изменяет состояние КОМПОНЕНТА PackageManager.setComponentEnabledSetting()) Android удаляет службу из-под контроля и значок уведомления.

Сообщение об ошибке на ноябрь 2011 г.

...