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(...).
надеюсь, что поможет кому-то