我正在Xamarin.Android平台中实现一个Android应用程序,该应用程序用于跟踪他旅行的距离和路线。 通过使用后台定位服务和前台定位服务,适用于较低版本和较高版本的 Android 操作系统。
当用户关闭应用程序时,我在更高版本的Android设备(高于8.0操作系统版本)中遇到问题,我的前台服务正在停止,无法跟踪距离和路线。 它只给了我与Arial路线的起点和终点距离。
请给我任何其他方法来解决我的问题,而无需使用谷歌或其他方向API。
原因:
为了保持电池电量、用户体验和系统运行状况,在运行 Android 8.0 的设备上使用后台应用时,接收位置更新的频率较低。此行为更改会影响接收位置信息更新的所有应用,包括 Google Play 服务。
这些更改会影响以下 API:
- 融合位置提供程序 (FLP)
- 地理围栏
- 全球导航卫星系统测量
- 位置管理器
- 无线网络管理器
溶液:
Android 8.0 引入了一种称为上下文的新方法。StartForegroundService (),在前台启动一项新服务。系统创建服务应用后有五秒钟的时间调用服务startForeground
可见()方法显示用户新服务的通知。如果在此时间限制内未调用应用程序
StartForeground ()
,则系统将停止此ANR服务和声明的应用程序。
Intent service = new Intent(TheApplication.getInstance().getApplicationContext(), MyBackgroundService.class);
service.putExtra("startType", 1);
if (Build.VERSION.SDK_INT >= 26) {
TheApplication.getInstance().startForegroundService(service);
} else {
TheApplication.getInstance().startService(service);
}