搜索位置时,防止GPS耗尽手机电池

时间:2014-05-07 18:32:02

标签: android gps android-location

我正在使用LocationManager的方法requestLocationUpdates来获取手机的位置。

我正在使用GPS作为提供商并使用LocationListener来更新我的应用的用户界面。

我需要每1000毫秒在我的Activity上调用一个方法。为此,我将requestLocationUpdates配置为:

locationManager.requestLocationUpdates(provider, 0, 1000, listener);

一切都运作良好。调用onLocationChanged方法,显示纬度和逻辑正常。

但我有些疑惑。

  1. 如果我在没有GPS信号的地方会怎么样?
  2. 有一些automatic超时?
  3. 或者应用程序会尝试一直使用GPS获取位置并耗尽电池。
  4. 如果我切换到WiFI/3G提供商会发生什么情况,那信号也不起作用?它发生了相同的情况?
  5. 我通过互联网搜索寻找答案,但我找不到合适的解决方案。

1 个答案:

答案 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。