如何使用CLLocationManager限制应用程序的电池消耗

时间:2013-07-16 07:32:04

标签: iphone ios objective-c cllocationmanager batterylevel

我正在开发一个iPhone应用程序,我正在使用GPRS不时更新用户的当前位置。

我发现电池耗尽了。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:6)

你的观察是正确的。 GPS服务是耗电量大的操作。它涉及启动机载无线电并查询可用的蜂窝塔,Wi-Fi热点或GPS卫星,这可能需要几秒钟。让标准位置服务长时间运行会耗尽设备的电池电量。

iOS人员为此设计了一个解决方案。它称为意义位置变化。重要变化定位服务为具有蜂窝无线电的设备提供低功率定位服务。此服务仅在iOS 4.0及更高版本中可用,并且还可以唤醒暂停或未运行的应用程序。这种方式的工作方式是您订阅此服务并请求iOS通知您,用户可能会发生“表示位置”更改。 “重要”的定义不在您手中。实际上,这就是节省电池的原因。你不查询位置。你得到更新。

在我看来,这个API非常出色并且提供了“相当”准确的位置。除非您正在构建一个跟踪应用程序,否则此API就可以轻松使用电池了。我无法告诉你我被无情地删除的应用程序数量(付费和免费)只是因为他们滥用位置服务和耗尽我的电池。想象一下,由于电池耗尽,用户的iPhone在半天内无法使用。要非常注意这一点。启动此服务的方法是 -

- (void)startSignificantChangeUpdates
{
    // Create the location manager if this object does not
    // already have one.
    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];

    locationManager.delegate = self;
    [locationManager startMonitoringSignificantLocationChanges];
}

此后,与标准位置服务一样,位置数据将传递给委托对象。并且您可以根据您的用例使用它。有关详情,请访问Apple Location Docs