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
, как описано здесь, и я вижу, что мой сервис не на переднем плане.
Ответы
Ответ 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)
с уведомлением о появлении.