我有2个应用程序(1个是在后台注册和扫描iBeacons,没有测距)而另一个没有。除了第一个启用iBeacons之外,这两个应用程序基本相似。
// location manager config
+ (CLLocationManager *)sharedLocationManager {
static CLLocationManager *_locationManager;
@synchronized(self) {
if (_locationManager == nil) {
_locationManager = [[CLLocationManager alloc] init];
//_locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
_locationManager.pausesLocationUpdatesAutomatically = NO;
if ([_locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]){
_locationManager.allowsBackgroundLocationUpdates = YES;
}
}
}
return _locationManager;
}
- (void)startMonitoringItem:(Item *)item {
CLBeaconRegion *beaconRegion = [self beaconRegionWithItem:item];
CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
[locationManager startMonitoringForRegion:beaconRegion];
}
- (void)stopMonitoringItem:(Item *)item {
CLBeaconRegion *beaconRegion = [self beaconRegionWithItem:item];
CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
[locationManager stopMonitoringForRegion:beaconRegion];
}
我在第一个应用程序中注册了大约100个iBeacons,并在iPhone 6和iPhone 6 Plus上运行了这两个应用程序,在100加iBeacons附近运行相同的操作系统版本,两者都启用了蓝牙。
我只对入口和出口事件感兴趣,基本上只是在第一个应用程序中实现了这两个调用。我将测试运行了大约14个小时,只需在iBeacons附近启用了支持蓝牙的两个iPhone。
当我在设置菜单中检查电池状态时,第一个应用程序比第二个应用程序消耗的电池多1%(例如:第一个应用程序:25%,第二个应用程序:24%),两者都相同设备。这是预期的行为,因为iOS控制的蓝牙扫描算法应该进行优化以保留电池。
然而,在我的客户端设备上,第一个应用程序消耗的电量比第二个应用程序多5倍(例如:第一个应用程序:10%,第二个应用程序:2%)。
当我检查他的蓝牙设置时,我意识到他的iPhone与大约8个其他设备配对。
所以我的问题是这个。与其他设备配对会导致我的第一个应用程序的电池消耗量大得多,即使它只是扫描iBeacons吗?如果是,有什么方法可以通过算法优化忽略配对设备并只扫描iBeacons。
我已经广泛阅读了iOS文档并咨询了stackoverflow,但到目前为止还没有找到满意的答案。
我将非常感谢任何建议!
更新:请参见截图
在上面的屏幕截图中,我的设备上的第一和第二应用电池使用百分比几乎相同。但是,在我的客户端设备(与其他8个设备配对)上,过去24小时和过去7天,第一个应用程序通常比第二个应用程序电池使用百分比(例如:10%到2%)多5倍。这两个应用程序在他的设备上运行的时间大致相同。这不是第一次发生。
答案 0 :(得分:1)
是的,蓝牙配对,尤其是经典的蓝牙会比iOS上的后台使用更多的电池而不是扫描信标。
您无法在应用程序外部进行配对。 Apple的iOS沙盒应用程序,因此它们不会影响一般系统设置(例如蓝牙开启或关闭,或蓝牙配对等绑定和扬声器)或其他应用程序的行为(例如那些可能与蓝牙设备配对以用于特定应用程序的应用程序。)
底线是您描述的电池使用量不是由应用的信标扫描引起的。它是由配对引起的。如果您从客户端的设备卸载第一个应用程序,设备应该以与您的应用程序根本没有安装相似的速率耗尽电池。