iPhone:配对设备与 iBeacon 蓝牙电池消耗
iPhone: Paired Devices vs iBeacon Bluetooth Battery Consumption
我有 2 个应用程序(1 个在后台注册和扫描 iBeacon,没有 运行ging),另一个没有。除了第一个启用 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 个 iBeacon,运行 这两个应用程序都在 iPhone 6 和 iPhone 6 Plus 上,运行 100 多个 iBeacons 附近的相同 OS 版本,都启用了蓝牙。
我只对进入和退出事件感兴趣,基本上只是在第一个应用程序中实现了这两个调用。我 运行 测试了大约 14 个小时,只是将两个 iPhone 都启用了蓝牙放在 iBeacon 附近。
当我在设置菜单中检查我的电池状态时,第一个应用比第二个应用最多消耗 1% 的电量(例如:第一个应用:25%,第二个应用:24%),这是一样的在两个设备上。这是预期的行为,因为应该优化由 iOS 控制的蓝牙扫描算法以节省电量。
但是,在我客户的设备上,第一个应用比第二个应用消耗的电量多 5 倍(例如:第一个应用:10%,第二个应用:2%)。
当我检查他的蓝牙设置时,我发现他的 iPhone 与大约 8 个其他设备配对。
所以我的问题是这样的。与其他设备配对是否会导致我的第一个应用程序耗电量大得多,即使它只是在扫描 iBeacons?如果是,有什么方法可以通过算法优化以忽略配对设备并只扫描 iBeacon。
我已经广泛阅读了 iOS 文档并咨询了 Whosebug,但到目前为止没有找到满意的答案。
我将不胜感激任何建议!
更新:示例请看截图
在上面的屏幕截图中,第一个和第二个应用程序的电池使用百分比在我的设备上几乎相同。但是,在我客户的设备(与其他 8 台设备配对)上,在过去 24 小时和过去 7 天内,第一个应用程序的电池使用百分比通常是第二个应用程序的 5 倍(例如:10% 到 2%) .这两个应用程序在他的设备上 运行 的时间大致相同。这不是第一次发生。
是的,蓝牙配对,尤其是经典蓝牙会比在后台扫描信标消耗更多电量iOS.
对于在您的应用程序之外完成的配对,您无能为力。 Apple 的 iOS 沙盒应用程序因此它们不会影响一般系统设置(例如蓝牙开启或关闭,或用于网络共享和扬声器之类的蓝牙配对)或其他应用程序的行为(例如那些可能与蓝牙设备配对用于特定应用程序的应用程序。)
最重要的是,您描述的电池使用情况并非由应用的信标扫描引起。这是配对造成的。如果您从客户的设备上卸载第一个应用程序,则该设备应该以与根本没有安装您的应用程序类似的速度耗尽电池电量。
我有 2 个应用程序(1 个在后台注册和扫描 iBeacon,没有 运行ging),另一个没有。除了第一个启用 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 个 iBeacon,运行 这两个应用程序都在 iPhone 6 和 iPhone 6 Plus 上,运行 100 多个 iBeacons 附近的相同 OS 版本,都启用了蓝牙。
我只对进入和退出事件感兴趣,基本上只是在第一个应用程序中实现了这两个调用。我 运行 测试了大约 14 个小时,只是将两个 iPhone 都启用了蓝牙放在 iBeacon 附近。
当我在设置菜单中检查我的电池状态时,第一个应用比第二个应用最多消耗 1% 的电量(例如:第一个应用:25%,第二个应用:24%),这是一样的在两个设备上。这是预期的行为,因为应该优化由 iOS 控制的蓝牙扫描算法以节省电量。
但是,在我客户的设备上,第一个应用比第二个应用消耗的电量多 5 倍(例如:第一个应用:10%,第二个应用:2%)。
当我检查他的蓝牙设置时,我发现他的 iPhone 与大约 8 个其他设备配对。
所以我的问题是这样的。与其他设备配对是否会导致我的第一个应用程序耗电量大得多,即使它只是在扫描 iBeacons?如果是,有什么方法可以通过算法优化以忽略配对设备并只扫描 iBeacon。
我已经广泛阅读了 iOS 文档并咨询了 Whosebug,但到目前为止没有找到满意的答案。
我将不胜感激任何建议!
更新:示例请看截图
在上面的屏幕截图中,第一个和第二个应用程序的电池使用百分比在我的设备上几乎相同。但是,在我客户的设备(与其他 8 台设备配对)上,在过去 24 小时和过去 7 天内,第一个应用程序的电池使用百分比通常是第二个应用程序的 5 倍(例如:10% 到 2%) .这两个应用程序在他的设备上 运行 的时间大致相同。这不是第一次发生。
是的,蓝牙配对,尤其是经典蓝牙会比在后台扫描信标消耗更多电量iOS.
对于在您的应用程序之外完成的配对,您无能为力。 Apple 的 iOS 沙盒应用程序因此它们不会影响一般系统设置(例如蓝牙开启或关闭,或用于网络共享和扬声器之类的蓝牙配对)或其他应用程序的行为(例如那些可能与蓝牙设备配对用于特定应用程序的应用程序。)
最重要的是,您描述的电池使用情况并非由应用的信标扫描引起。这是配对造成的。如果您从客户的设备上卸载第一个应用程序,则该设备应该以与根本没有安装您的应用程序类似的速度耗尽电池电量。