我同意AlexBottoni的大部分评论,尽管在某些方面我无法支持他。
概述
首先,只是为了确认你是否做对了...
你为两个提供程序设置了相同的LocationListener
。要确定你从哪里接收到位置,你需要像这样进行测试:
public void onLocationChanged(Location fix) {
if(fix.getProvider().equals(LocationManager.GPS_PROVIDER)){
} else if(fix.getProvider().equals(LocationManager.NETWORK_PROVIDER)){
}
此外,您可以设置不同的获取频率。
Gps
每30秒提供一个新位置,
Network
则每2分钟提供一次。
由于您没有设置最小距离,只要两者(只要能够获得定位),就应该从提供者中收到一个新的
Location
。如果未获得定位,则是因为它们无法获取定位。
此外,可能需要比请求的时间稍长才能获得定位(主要是与GPS相关),因为它可能需要一些时间来与卫星同步并确定位置。
回退
没有内置的提供程序回退。如Alex所说,它们是独立的。我使用以下方法实现备用:
- 注册Gps侦听器并启动计时器
- 在每个GPS位置上,重新启动计时器
- 如果计时器到达结束,请注册Network侦听器(Gps侦听器保持注册状态)
- 如果有新的Gps位置到达,请取消注册Network侦听器,重新启动计时器
首选提供程序
尽管Gps可能无处不在,但比Network精度更高。在我的城镇中,我使用GPS获得6米的精度,而使用Network获得1千米的精度 :-(
两项服务
无论您将侦听器、活动或服务注册在哪里,分开或一起,只要您请求它们且提供程序可以获取定位,您就会获得位置(假设应用程序没有错误)。
最后注意事项
确保您拥有所需的权限(ACCESS_FINE_LOCATION、INTERNET等)。
确保手机设置启用了网络定位(通常默认情况下是禁用的)。
大多数GPS接收器支持更新卫星位置信息,以改善定位时间。您可以在市场上使用
GPS状态
来执行此操作。
祝好。