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 ответов
в дополнение к лучшему ответу.
вы также должны проверить, что вы позвонили setSmallIcon
.
На моем телефоне android я не могу получить то, что ожидал, не позвонив setSmallIcon
Дмитрий. Я только что перенес вашу проблему и нашел причину.
Если ваше приложение изменяет состояние компонента PackageManager.setComponentEnabledSetting())
Android удаляет сервис из foregraound и его значок уведомления.
это может быть старая нить, но я хотел бы добавить то, что я только что узнал, что еще не упоминается:
возможно, что a Service
жива stopSelf()
называется потому, что есть Activity
, которые привязаны к Service
. На самом деле,startForeground()
просто не собирается показывать уведомление или давать какие-либо исключения в этом обстоятельстве.
является ли ваша служба запущенной службой или связанной службой? У меня была такая же проблема с привязанной службой, но запуск службы перед привязкой позволил мне вызвать startForeground(int, notification)
С и уведомление появится.
в моем случае не было никакого уведомления после startForeground(...)
invoke, потому что я использовал только .setSubText(...)
для установки его сообщения (потому что он отображается с меньшим шрифтом на большинстве устройств). Но некоторые из устройств Xiaomi Redmi Note 4 не будут показывать никаких уведомлений, Если вы не установите сообщение с помощью .setContentText(...)
.
надеюсь, что поможет кому-то