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

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

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

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

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

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

6 ответов


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


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


Дмитрий. Я только что перенес вашу проблему и нашел причину.

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

ошибка сообщили в ноября,


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

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


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


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

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