Только для Android 9 (круговая диаграмма): Context.startForegroundService () не вызывал Service.startForeground () - отлично работает на Oreo - PullRequest
0 голосов
/ 26 октября 2018

Мы настроили наше текущее уведомление для Oreo, и оно отлично работало.Теперь, только на Pie (не происходит на устройствах Oreo), мы получаем заголовочную ошибку.Что-то изменилось в службах переднего плана в Pie, которые мне не хватает?

Вот код onCreate для службы переднего плана ->

override fun onCreate() {
    super.onCreate()

    val notification: Notification = NotificationCompat.Builder(this, packageName)
            .setSmallIcon(R.drawable.status_notification_icon)
            .setContentTitle(getString(R.string.ongoing_notify_temp_title))
            .setContentText(getString(R.string.ongoing_notify_temp_message))
            .setGroup(AppConstants.NOTIFICATION_GROUP_ONGOING)
            .setColor(ContextCompat.getColor(this, R.color.custom_blue))
            .build()

    startForeground(ONGOING_NOTIFY_ID, notification)

    appSettings = AppSettings(this)

    weatherLookUpHelper = WeatherLookUpHelper()
    MyRoomDatabase.getInstance().invalidationTracker.addObserver(onChange)

    retrieveCurrentLocation()
    createAlarmManager()
}

, как вы можете видеть, мы просто создаемуведомление и затем вызов startForeground.Любые идеи о том, почему этот код генерирует названную ошибку?

Примечание: Fabric Crashlytics показывает, что этот сбой происходит только на устройствах Pixel (пиксель, пиксель xl, пиксель 2, пиксель 2 xl) с Pie

РЕДАКТИРОВАТЬ: У нас есть разрешение переднего плана в нашем манифесте

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Что-то изменилось в службах переднего плана в Pie, которые мне не хватает?

YES Посмотрите здесь заметки о миграции Android 9 / Pie

Изменить

Разрешение на обслуживание переднего плана

Резюме

Приложения, желающие использовать службы переднего плана, теперь должны сначала запросить разрешение FOREGROUND_SERVICE . Это нормальное разрешение, поэтому система автоматически предоставляет его запрашивающему приложению. Запуск службы переднего плана без разрешения вызывает исключение SecurityException.

UPDATE

связанная проблема в Google Issue Tracker Context.startForegroundService () не вызвал Service.startForeground

0 голосов
/ 29 октября 2018

Как упомянуто здесь Фоновые ограничения службы , приложение / служба имеет пять секунд для вызова startForeground(). Если приложение не вызывает startForeground () в течение определенного времени, система останавливает службу и объявляет приложение должно быть ANR.

Есть несколько возможностей:

  1. Либо ваша служба переднего плана уничтожается / завершается до вызова метода startForeground().
  2. Или, если служба переднего плана уже создана и ее вызов вызывается снова, метод onCreate не будет вызываться, вместо этого будет вызываться onStartCommand. Затем переместите свою логику в onStartCommand, чтобы вызвать startForeground() метод.
  3. Ваш идентификатор уведомления в startForeground не должен быть 0 , иначе это также вызовет сбой.
...