Итак, с Android O вам нужно, чтобы ваша служба работала как служба переднего плана, если вы хотите получать больше, чем несколько обновлений местоположения в час.
Я заметил, что старый метод запуска службы переднего плана, похоже, работает на O. т.е.
startForeground(NOTIFICATION_ID, getNotification());
В соответствии с инструкциями по изменению поведения здесь: https://developer.android.com/preview/behavior-changes.html
"Метод NotificationManager.startServiceInForeground() запускает службу переднего плана. Старый способ запуска службы переднего плана больше не работает."
Хотя новый метод работает только при таргетинге на O, кажется, что старый метод все еще работает на O-устройстве, будь то таргетинг O или нет. Я что-то пропустил?
//Редактировать Включая пример:
Пример проекта Google LocationUpdatesForegroundService действительно имеет рабочий пример, где вы можете увидеть проблему из первых рук. https://github.com/googlesamples/android-play-location/tree/master/LocationUpdatesForegroundService
Метод startForeground работает без проблем, будь то таргетинг и компиляция по уровню API 25 или таргетинг и компиляция с O (как указано здесь: https://developer.android.com/preview/migration.html#uya)
Итак, чтобы воспроизвести:
- Настроить приложение gradle, как указано в предыдущей ссылке
- Откройте приложение
- Запросить обновления местоположения
- Закрыть приложение (через кнопку "Назад" или "Домашняя кнопка" )
Служба работает на переднем плане (отображается значком в тени уведомлений). Обновления местоположения проходят, как ожидается (каждые 10 секунд) даже на устройстве, работающем на O.
Вот что заставляет меня думать, что я могу что-то упустить.