iPhone GPS - 电池耗尽极快

时间:2011-12-31 17:48:52

标签: iphone ios5 gps power-management

我们正在开发一款具有大量GPS使用率的应用,但我们无法优化电池寿命。

即使没有移动设备,也有显着的电池排放,根据代码,不应该发生。

以下是代码:

locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = 100;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];

理想情况下,我们希望每20分钟触发一次GPS(如果没有位置更改,则节省电量)或者如果有位置变化则每5分钟触发一次GPS。根据我的开发人员的说法,这是无法完成的

以前我们使用的是kCLLocationAccuracyBest,它消耗的电量非常快,现在我们正在使用kCLLocationAccuracyHundredMeters

startUpdatingLocation - 是获取GPS坐标。还有另一个叫做startMonitoringSignificantLocationChanges的调用,它可以获得AGPS坐标,我相信每当手机信号塔发生变化时它就会返回坐标,因此消耗的电量非常快。

distanceFilter - 设备在生成更新事件之前必须横向移动的最小距离(以米为单位)。在距离滤波的基础上,我们从设备获得GPS定位,然后我们将更新的GPS坐标发送到服务器。

非常感谢任何帮助 谢谢!

4 个答案:

答案 0 :(得分:4)

  

还有另一个调用startMonitoringSignificantLocationChanges   得到AGPS坐标我相信返回坐标   每当电池塔改变,因此真的消耗电池   快。

这正是它所做的,但你会得出关于所需功率的结论。 GPS接收器和WiFi收发器可用于帮助确定位置,但它们是必须通电的额外设备才有用。但是像iPhone这样的手机需要与最近的手机信号塔保持联系才能接听电话,因此使用手机信号塔作为位置信息来源应该非常有效。以下是CLLocationManager reference page-startMonitoringSignificantLocationChanges所说的内容:

  

此接口仅在检测到更改时才会发送新事件   设备的相关单元塔,导致更新频率降低   并且显着降低了用电量。

它还将该服务描述为提供“巨大的节能”,因此它似乎是您所描述的工作的正确工具。当然,如果你同时使用标准位置更新机制,你将看不到节电,所以请确保你没有同时使用它们。

  

理想情况下,我们希望每20分钟触发一次GPS(如果没有   位置改变,然后节省电池)或每5分钟,如果有   位置变化。据我的开发人员说,这是无法做到的

听起来这里有一些误解。你当然可以每隔20分钟启动GPS以获得一个修复,如果这是你想要的,虽然你不能从后台做到这一点。重要的位置更改服务会通知您的应用,即使它在后台运行,因此您的开发人员可能正在讨论后台更新。

答案 1 :(得分:0)

您认为startMonitoringSignificantLocationChanges消耗电池真的很快可能是不正确的。细胞塔的变化通常比100米的移动频率低得多。即使在空闲且所有应用程序都处于睡眠状态时,iPhone也会检查此事件。

然而,当远离任何塔(仅1巴)时,保持手机开启(例如飞机模式关闭)将耗尽设备的电池,无论应用程序是否正在进行任何位置监控。

在库存iOS设备上,应用程序无法在每20分钟或每5分钟基于计时器的基础上触发位置监控,而无需保持设备开启且您的应用程序在前台运行,这将耗尽电池。

答案 2 :(得分:0)

如果你需要一个良好的精度,你应该startUpdatingLocation,一旦你得到第一个修复,你应该stopUpdatingLocation然后startMonitoringSignificantLocationChanges。

这足以满足大多数应用目的。

答案 3 :(得分:-1)

  

理想情况下,我们希望每20分钟触发一次GPS(如果没有   位置改变,然后节省电池)或每5分钟,如果有   位置变化。据我的开发人员说,这是无法做到的

这可以使用NSTimer来完成,该NSTimer每隔20分钟调用startLocating(一种自定义方法,创建CLLocationManager并在其上调用startLocating)方法。确保在找到符合您喜欢的精确度的CLLocation后调用CLLocationManager的stopLocating

然而,这样做意味着在20分钟内您可能正在使用一个完全关闭的位置。这取决于您计划如何使用该位置以及需要的精确度,但也许您的开发意味着“不可能”是您的应用始终需要用户的实际位置。