2014-12-03 90 views
0

我试图将高能效与我使用CLLocationManager的,因为我的应用程序的限制:节省电池与iOS CLLocationManager

  1. 如果应用程序是在模式“A”,提供尽可能多的&作为尽可能准确的位置数据 。

  2. 如果应用程序是在模式“B”,检查在至少每10分钟一次 与“足够好”(〜500米也许)的位置数据

  3. 模式“A”和模式“B”必须两个工作,而应用程序在 背景。

由于约束3,我在plist中向UIBackgroundModes添加了'location'。 我配置我的核心位置管理器,像这样:

- (CLLocationManager *)manager { 
    if (_manager == nil) { 
     _manager = [[CLLocationManager alloc] init]; 
     _manager.desiredAccuracy = kCLLocationAccuracyBest; 
     _manager.distanceFilter = kCLDistanceFilterNone; 
     _manager.pausesLocationUpdatesAutomatically = NO; 
     _manager.delegate = self; 
    } 

    return _manager; 
} 

我也定义像这样的枚举:

typedef NS_ENUM(NSUInteger, LocationMonitoringMode) { 
    LocationMonitoringModeSignificantChanges, //Mode B 
    LocationMonitoringModeContinuous, //Mode A 
}; 

我用像这样:

- (void)setLocationMonitoringMode:(LocationMonitoringMode)mode { 
    if (mode == LocationMonitoringModeContinuous) { 

     [self.manager stopMonitoringSignificantLocationChanges]; 
     [self.manager startUpdatingLocation]; 

    } else if (mode == LocationMonitoringModeSignificantChanges) { 

     [self.manager stopUpdatingLocation]; 
     [self.manager startMonitoringSignificantLocationChanges]; 
    } 
} 

问题:这是'切换'使用CLLocationManager节省电池的有效方法吗?使用kCLLocationAccuracyBest & kCLLocationAccuracy3Kilometers(gps vs cell tower radios)显然有很大的功耗差异。但也有一个大的成本btwn,说kCLLocationAccuracyBest & kCLLocationAccuracyNearest10Meters

+0

'kCLLocationAccuracyBest'&'kCLLocationAccuracyNearest10Meters'将会花费相同。低于100米的任何东西都需要该设备为GPS芯片供电。 – progrmr 2014-12-04 00:56:28

回答

0

第一个问题:

是的。切换看起来很好。您不必创建两个单独的位置管理器实例。

据对CoreLocation https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html

的显著改变定位服务精度这对大多数应用足够好,代表了节能的替代标准定位服务苹果文档。该服务使用Wi-Fi来确定用户的位置并报告该位置的变化,从而使系统比其他方式更积极地管理用电量。

第二个问题:

您可以使用苹果公司的能源诊断仪器,看在什么desiredAccuracy级GPS芯片上电。我们最近的调查显示,当所需的精度或距离过滤器值小于100米时,GPS芯片就会通电。仪器提供的能源使用价值对我来说非常粗糙,无法得出期望的准确度和电池使用之间的任何直接关系。但是,根据流行的看法,如果可以的话,不要开启GPS芯片,而是节省能源。