位置提供商真的是电池耗尽吗?

mus*_*ikk 3 android battery location

我需要实现基于位置的服务.我不需要精确的位置,因此不需要GPS.

最简单的方法是在应用开始时开始侦听位置更新,并将其保持为ON:

    mLocationMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 100, mPendingIntent);
Run Code Online (Sandbox Code Playgroud)

由于我不需要太多精确度,我将更新的最大频率设置为10秒和100米而不是默认值0,0.

当我们考虑位置时,我们认为电池耗尽,但我想这是一个快捷方式,只有GPS真正耗尽电池.我认为这种网络提供商的使用不会耗尽电池.有什么想法吗?

Dev*_*n M 7

Android开发者指南中包含有关此主题的主题.我建议您查看页面上的代码示例.

这就是他们提到的关于节省电池和各种参数的内容.

调整模型以节省电池和数据交换

在测试应用程序时,您可能会发现用于提供良好位置和良好性能的模型需要进行一些调整.这里有一些你可能会改变的东西,以找到两者之间的良好平衡.减小窗口的大小

您可以在较小的窗口中监听位置更新,这意味着与GPS和网络位置服务的交互较少,从而可以延长电池寿命.但它也允许更少的位置从中选择最佳估计.设置位置提供程序以减少更新频率

降低窗口期间出现新更新的速率也可以提高电池效率,但代价是准确性.权衡取决于您的应用程序的使用方式.您可以通过增加requestLocationUpdates()中指定间隔时间和最小距离更改的参数来降低更新速率.限制一组提供者

根据您使用应用程序的环境或所需的准确度,您可以选择仅使用网络位置提供程序或仅使用GPS,而不是两者.仅与其中一项服务交互可能会降低电池使用量,从而降低潜在的准确成本.

基本上,请考虑减少您请求的更新频率或请求更新的时间.这就像高尔夫,你要求的位置越少越好.考虑以下用例: 基于位置的内容标记的示例

在该示例中,应用程序等待,直到用户执行需要位置的操作,然后在不再需要位置数据时停止轮询.

虽然轮询不断允许应用程序在即时通知中准备好位置,但它根本不值得浪费资源,以减少请求您可以使用的位置时的延迟getLastKnownLocation (String provider).

编辑: 有一种方法可以确定各种LocationProviders的电源使用情况!

调用getPowerRequirement ()LocationProvider将返回三个常量之一.

int     POWER_HIGH  A constant indicating a high power requirement.
int     POWER_LOW   A constant indicating a low power requirement.
int     POWER_MEDIUM    A constant indicating a medium power requirement.
Run Code Online (Sandbox Code Playgroud)

为了使代码更具可读性,请考虑meetsCriteria (Criteria criteria)在任何布尔检查中使用以使代码更具可读性.

我将使用它来确定您的应用程序应该使用哪种方法以实现最低的功耗成本.此外,您还可以支持对提供商具有不同功率要求的设备.


Com*_*are 6

从电池消耗的角度来看,您的100米距离滤波器对您来说无济于事.这只会控制PendingIntent由于修复而执行的次数.

操作系统可能会使用您的10秒时间值来控制电源使用,但无法保证.并且,如果值很低,那么它的使用率似乎不太可能.每小时,也许,但不是每10秒钟.

更重要的是,您需要始终保持CPU通电.而且,既然你正在使用它的PendingIntent味道requestLocationUpdates(),我猜你打算长期收集数据.

如果您只有COARSE权限,Android有望避开WiFi热点接近检测,这将节省一点电力.

总的来说,网络提供商将比GPS提供商消耗更少的电力."少"与"小"相去甚远.在Nexus级Android设备上,GPS + CPU为我提供了几个小时的电池续航时间(通过使用Google导航确定).我希望网络提供商+ CPU可以持续几个小时,但这就是它,因为CPU本身就是一个相当重要的电池消耗.

我更关心的是:

最简单的方法是在应用程序启动时开始侦听位置更新,并将其保持打开状态

这听起来好像您实际上并没有计划删除您的位置更新.对于任何类型的提供者(除了可能的被动提供者),这是一个非常糟糕的主意.当您注册和删除更新时,请有一个更具体的计划.特别是,确保用户能够控制何时消耗电池到这个程度.