因此,对于 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
无论是针对 API 级别 25 进行定位和编译,还是针对 O 进行定位和编译,startForeground 方法似乎都可以正常工作(如下所示:https ://developer.android.com/preview/migration.html#uya )
所以,要重现:
- 如上一个链接中所述配置应用程序gradle
- 打开应用程序
- 请求位置更新
- 关闭应用程序(通过后退按钮或主页按钮)
服务正在前台运行(由通知阴影中的图标显示)。即使在运行 O 的设备上,位置更新也会按预期进行(每 10 秒一次)。我在这里缺少什么?