noa*_*ahd 8 gps android google-play-services location-services fusedlocationproviderapi
在我们的应用程序中,我们使用融合位置提供程序(FLP)来跟踪位置.我们注意到,应用程序偶尔会进入一个状态,其中位置回调停止被调用.该应用程序主要用于两个平板电脑(nexus 7和LG G-pad 8.3).我们已经看到两个设备都出现了这个问题.通常,重置设备似乎可以缓解这个问题.我们相信我们遵循大多数使用FLP的最佳实践.但是,万一我们将这个示例代码放在一起,说明了我们如何使用FLP.
获取谷歌API客户端并致电连接:
m_googleApiClient = builder
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
m_googleApiClient.connect()
Run Code Online (Sandbox Code Playgroud)
连接后,我们开始侦听位置回调:
@Override
public void onConnected(Bundle bundle) {
m_fusedLocationProviderApi.requestLocationUpdates(m_googleApiClient, m_locationRequest, this);
}
Run Code Online (Sandbox Code Playgroud)
位置请求如下所示:
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
然后我们像这样实现回调:
@Override
public void onLocationChanged(Location location) {
// set location member var and record timestamp.
}
Run Code Online (Sandbox Code Playgroud)
当问题发生时,我们似乎没有得到任何错误回调.当我们检测到我们在很长一段时间内没有收到GPS时,我们也尝试在google api客户端上调用reset().我们还每2秒使用一个计时器监控位置可用性(使用getLocationAvailability).通常我们发现让用户重置其设备(开机,关机)可以解决问题.
我们的问题是:
小智 4
我曾与 FusedLocationProvider 在各种低端和高端设备上广泛合作,并且发现过类似的问题,其中 GPS 数据之间存在不良补丁。因此,我做了一些更改来解决与可靠性和稳健性相关的这些问题(如下所列),之后就再也没有看到这些问题。
根据我的经验,此类问题的可能解决方案是:
更新 Play 服务: 当我遇到这些问题时,我使用的是 7.x - 8.x 范围内的 Android Play 服务版本。
Sol:最近,更新到 10.x 版本的播放服务有助于解决这些问题。我们尚未在更新后看到这些问题,因此这也绝对可能是您的情况的原因之一。
使 Android 服务更加可靠和健壮: 这是我们看到 GPS 数据中断的主要原因之一,并且在重新启动设备或再次初始化设置时,我们通常会重新启动服务。因此,重新启动的服务可能会将位置更新恢复正常。
Sol:我使用前台服务而不是后台服务,这是迄今为止最可靠的解决方案,但这为用户提供了粘性 UI 通知。如果不是这样,那么对后台服务进行健康检查(运行或终止)也是一个不错的选择。
在连接暂停/错误时重新连接 GoogleAPIClient 我见过由于网络状况不佳或其他原因 GoogleAPIClient 连接被暂停或返回错误的情况。尽管我无法验证这对位置数据丢失的直接影响,但这很可能是本例中的一个原因。为了支持这一点,如果发生此 GoogleAPIClient 连接问题,位置更新的重置将失败,这也是您所观察到的。
Sol:在暂停或出错时重新连接 GoogleAPIClient 可以解决此问题。
除了这些之外,还有一个原因可能导致此问题:
设备 GPS 定位丢失: 设备有时会丢失 GPS 定位,从而导致在恢复 GPS 定位之前缺少 GPS 数据。绝对无法确定位置是否因 GPS 定位而丢失。重置设备的位置设置会对设备尝试进行 GPS 修复产生影响,这也可能是此处的原因。
免责声明:我是HyperTrack的 Android 开发人员,我们正在为在应用程序中构建位置功能的开发人员开发一个位置堆栈,这些都是我们一直在解决的问题。如果您使用我们的SDK测试类似的场景,那就太好了,如果您仍然遇到该问题,我们很乐意帮助您找到根本原因并解决问题。
| 归档时间: |
|
| 查看次数: |
2078 次 |
| 最近记录: |