我正在使用LocationManager的方法requestLocationUpdates
来获取手机的位置。
我正在使用GPS作为提供商并使用LocationListener
来更新我的应用的用户界面。
我需要每1000毫秒在我的Activity上调用一个方法。为此,我将requestLocationUpdates
配置为:
locationManager.requestLocationUpdates(provider, 0, 1000, listener);
一切都运作良好。调用onLocationChanged
方法,显示纬度和逻辑正常。
但我有些疑惑。
automatic
超时? WiFI/3G
提供商会发生什么情况,那信号也不起作用?它发生了相同的情况?我通过互联网搜索寻找答案,但我找不到合适的解决方案。
答案 0 :(得分:1)
例如,假设您正驾驶汽车并且LocationManager已连接到有效的GPS提供商。现在你开车穿过隧道并丢失信号。现在onLocationChanged()
不再被触发了。但系统将继续在后台搜索有效的GPS提供商。如果您通过隧道,系统将重新连接到GPS提供商(如果仍然可用),并再次触发onLocationChanged()
。
当系统正在寻找有效的提供商时,连接时电池的耗尽和获取位置更新会更高。
如果您切换到WiFi或3G,系统将查找最后一个设置提供商并覆盖前一个提供商。但行为将是相同的。
您可以通过监控LocationListener.onStatusChanged()
回调和GpsStatus.Listener界面来对此事件做出反应。例如。切换到其他提供商,或者如果没有提供商可用,请致电removeLocationUpdates()
并在requestLocationUpdates()
一段时间后再次致电Timer
。这样可以更好地节省电池。
编辑:
如果在设备的设置中启用了GPS,则 LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
将返回true。它并不表示您已连接到GPS提供商。
使用方法LocationManager.getBestProvider(Criteria, boolean)来了解哪个提供商可用。
作为备注:如果您在房间内,几乎不会连接到GPS。