我同意 AlexBottoni 的大部分评论很好的回答,尽管在某些方面我不能支持他。
概述
首先,只是为了检查你是否做对了......
您LocationListener
为两个提供商设置相同的设置。要确定您从哪里接收位置,您需要像这样测试它:
public void onLocationChanged(Location fix) {
if(fix.getProvider().equals(LocationManager.GPS_PROVIDER)){
//here Gps
} else if(fix.getProvider().equals(LocationManager.NETWORK_PROVIDER)){
//here Network
}
此外,您可以设置不同的采集频率。每 30 秒和每 2 分钟Gps
提供一个新位置。Network
由于您没有规定最小距离,您应该Location
从每个供应商那里收到一个新的(只要他们能得到修复),并按照要求的频率。如果您没有收到修复,是因为他们无法获得修复。
此外,获得修复(主要是使用 Gps)可能需要更长的时间,因为与卫星同步和修复位置可能需要一些时间。
倒退
从一个提供者到另一个提供者没有内置的回退。正如亚历克斯所说,他们是独立的。我正在使用以下方法来实现回退:
- 注册 Gps 监听器并启动计时器
- 在每个 GPS 位置,重新启动计时器
- 如果计时器结束,注册网络监听器(Gps监听器保持注册)
- 如果新的 Gps 位置到达,取消注册网络侦听器,重新启动计时器
首选供应商
虽然Gps
可能不是随处可用,但最精确的Network
。在我的城镇,GPS 精度为 6 米,网络精度为 1 公里 :-(
两项服务
无论您在哪里注册监听器、活动或服务,将它们分开,只要您请求它们并且提供者可以得到修复,您就会得到位置(假设应用程序中没有错误:-))
最后的笔记
确保您拥有所需的权限(ACCESS_FINE_LOCATION、INTERNET 等)。
确保电话设置启用了网络位置(通常默认为禁用)
大多数 Gps 接收器支持更新有关卫星位置的信息,从而缩短了定位时间。你可以GPS Satus
从市场上使用,做到这一点。
问候。