GPS消耗多少电池?
Posted
技术标签:
【中文标题】GPS消耗多少电池?【英文标题】:How much battery does GPS consume? 【发布时间】:2017-11-23 02:26:20 【问题描述】:根据Location Strategies,GPS 最准确,但会很快消耗电池电量。该文档建议应将电池电量纳入考虑范围,但该文档中没有任何使用不当的示例。 有人可以提供这样的例子吗。 我问是因为我在考虑一个用例,例如 例如。如果在一天内捕获用户位置 16 次(以 30 分钟为间隔)。那会是一个糟糕的用例模型吗?
【问题讨论】:
问题与 SO 无关。无论如何,最近 3-4 年主要品牌生产的中级智能手机能够在距离 5/10 米的点上跟踪持续 2 小时的跑步会话,如果显示器关闭,它们会消耗不超过 10% 的电池。因此,您的用例似乎几乎为 0 影响 @perissf:我更新了 OP。这是一个更具体的问题吗? 【参考方案1】:编辑
这是为位置请求设置超时功能的一个非常基本的示例。
public class MyLocationManager implements LocationListener
private static final int LOCATION_UPDATE = 1;
private LocationManager mLocationManager;
private Handler mHandler;
public MyLocationManager(Context context)
mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
mHandler = new Handler(new Handler.Callback()
@Override
public boolean handleMessage(Message msg)
switch (msg.what)
case LOCATION_UPDATE:
stopLocationUpdates();
return true;
default:
return false;
);
public void stopLocationUpdates()
mLocationManager.removeUpdates(this);
mHandler.removeMessages(LOCATION_UPDATE);
public void requestLocationUpdates(long timeOut)
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
mHandler.sendEmptyMessageDelayed(LOCATION_UPDATE, timeOut);
@Override
public void onLocationChanged(Location location)
stopLocationUpdates();
//YOUR CODE HERE
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
@Override
public void onProviderEnabled(String provider)
@Override
public void onProviderDisabled(String provider)
回答你帖子的标题:它因设备而异。
要了解更多细节,这实际上取决于您如何设置请求。在您的情况下,您说您希望以 30 分钟的间隔获得 16 个点,如果您在请求的一秒钟内收到所有点,这不会对功率产生太大影响。但是,您从未指定等待位置到达的时间或您请求的位置点的准确性应该是多少。所以理论上,如果你在地下室寻找 10m 的精度点,你可以让 GPS 模块无限期地运行。
我的建议
在完全不可用之前找出您需要的位置点的最大精度,并具备可靠的超时功能。 GPS 本身不会耗尽电池,它是设备处于唤醒状态以接收位置和 GPS 模块开启的组合,这会杀死电池寿命。将设备保持开启状态总共约 2 分钟以获得 16 分(约 8 秒超时)对电池的影响应该可以忽略不计。
【讨论】:
我对 3m 以内的精度感兴趣(没有地下室或类似的东西值得关注)。你说的超时是什么意思?我在 LocationManager API 中看到了我感兴趣的每 30 分钟的最小间隔,但不是超时。您能否给出或指出您所描述的方法的一些示例? 这种准确性是可能的,但我只希望在最好的情况下(外面,没有建筑物)。关于超时,如果您调用requestLocationUpdates()
,除非您明确调用removeUpdates()
,否则LocationManager 将不断轮询位置,直到它收到一个位置,如果您在GPS 缺乏区域,这可能是不确定的。即使您将 minTime 设置为 30 分钟,除非您立即获得一个点,否则 GPS 模块将一直打开,直到您获得一个点。
网上有什么好的例子可以参考吗?
在我的回答中添加了一个例子。
感谢您的更新。所以这只是延迟取消。但是我达到超时的事实是什么意思?用户所在的位置使得获取位置非常耗时(例如地铁)?如果我最终超时,是否有策略,例如X分钟后重试还是很可能我会再次超时?或者我应该重新安排时间和超时,直到我得到这个职位?或者如果发生超时就意味着最好不要重试?以上是关于GPS消耗多少电池?的主要内容,如果未能解决你的问题,请参考以下文章
在 iPhone/iPad 中发送一个 http 请求的电池消耗是多少?
什么消耗更多我的电池? wifi、数据连接(3g)或gps。安卓[关闭]
如何了解我的 Android 应用在用户设备上消耗了多少电量?