搜索位置时防止 GPS 耗尽手机电池
Posted
技术标签:
【中文标题】搜索位置时防止 GPS 耗尽手机电池【英文标题】:Prevent GPS draining battery of cell phone when location is searched 【发布时间】:2014-06-24 21:23:08 【问题描述】:我正在使用LocationManager的方法requestLocationUpdates
获取手机的位置。
我使用 GPS 作为 Provider 并使用 LocationListener
更新我的应用程序的 UI。
我需要每 1000 毫秒在我的 Activity 上调用一个方法。为此,我像这样配置了requestLocationUpdates
:
locationManager.requestLocationUpdates(provider, 0, 1000, listener);
一切运行良好。调用onLocationChanged
方法,显示经纬度ok。
但我有一些疑问。
-
如果我在没有 GPS 信号的地方会发生什么?
有一些
automatic
超时?
否则应用程序会一直尝试使用 GPS 获取位置并耗尽电池电量。
如果我切换到WiFI/3G
Provider 并且那个信号也不起作用,会发生什么?也一样吗?
我在互联网上搜索寻找答案,但找不到正确的解决方案。
【问题讨论】:
1.如果您没有 GPS 且没有供应商信号,您将无法获得位置。 2.据我所知,它会一直运行到你或服务器停止它(一旦你达到最大请求,服务器就会停止它)。 3. 是的,定期发出请求(尤其是每 1000 毫秒,即使它不会真正拉得那么快)会耗尽你的电池电量。 4. 如果您切换到您的提供商并且他们无法正常工作,您将不会获得更新。您必须有某种连接才能获取位置更新。 所以使用 GPS 或 WiFi/3G,没有信号,如果我不设法停止“拉”,电池会耗尽吗?有一些正确的方法可以做到这一点?谢谢 如果您没有信号,它只会继续寻找信号,这最终会耗尽您的电池电量。您可以设置某种计时器,一旦您在一段时间内没有收到信号,它将停止您的服务,并在有信号时提示用户重试 【参考方案1】:例如,假设您正在开车,并且 LocationManager 已连接到有效的 GPS 提供商。现在您开车穿过隧道并失去信号。现在onLocationChanged()
不再被触发。但系统将继续在后台搜索有效的 GPS 提供商。如果您通过隧道,系统会重新连接到 GPS 提供商(如果仍然可用),并再次触发 onLocationChanged()
。
连接并获取位置更新时的电池消耗比系统寻找有效提供商时要高得多。
如果您切换到 WiFi 或 3G,系统将查找最后一个设置的提供商并覆盖前一个。但行为将是相同的。
您可以通过监视LocationListener.onStatusChanged()
回调和GpsStatus.Listener 接口来对此事件做出反应。例如。切换到另一个提供商,或者如果没有可用的提供商,请致电removeLocationUpdates()
,并在一段时间后再次致电requestLocationUpdates()
,并使用Timer
。这将更好地节省您的电池电量。
编辑:
LocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
如果在设备设置中启用了 GPS,则返回 true。这并不表明您已连接到 GPS 提供商。
使用方法LocationManager.getBestProvider(Criteria, boolean) 可以知道哪个提供者可用。
请注意:如果您在房间内,您几乎永远无法连接到 GPS。
【讨论】:
我正在测试这种情况。我在我家里面(里面没有 GPS 信号)。我运行我的应用程序。应用程序使用 locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) 检查 GPS;并返回真。但是,当方法 locationManager.requestLocationUpdates(provider, 0, 1000, listener);被调用,开始尝试获取信号并且没有任何反应。没有调用 LocationListener 方法。不是 onLocationChanged,不是 onStatusChanged,什么都没有。这种情况下,电池没电了,不知道怎么办 感谢您的回答。所以你告诉我我是对的。问题是它不存在任何截断 GPS 拉动的方法?有没有办法加一个Timeout?,正确又简单的做法? 是的,只有 removeLocationUpdates(...) 会停止这个机制。以上是关于搜索位置时防止 GPS 耗尽手机电池的主要内容,如果未能解决你的问题,请参考以下文章
是否可以防止 iOS 和 Android 上的 GPS 作弊?