-
Notifications
You must be signed in to change notification settings - Fork 1k
后台模式
TrusBe edited this page Aug 28, 2017
·
7 revisions
后台模式指的是,app进入后台,仍然可以扫描、连接和操作peripheral或者作为外设被操作。
修改Info.plist文件,添加Required background modes键,并添加下面2个item
1. bluetooth-central
2. bluetooth-peripheral
这两个item的意义分别为:
- App communicates using CoreBluetooth
- App shares data using CoreBluetooth
虽然应用在后台时,我们可以执行很多蓝牙相关任务,但应用在前后台运行还是会有所区别
- CBCentralManagerScanOptionAllowDuplicatesKey扫描选项会被忽略,同一个 Peripheral 端的多个发现事件会被聚合成一个发现事件。
- 如果扫描 Peripheral 设备的多个应用都在后台,则Central设备扫描广告数据的时间间隔会增加。结果是发现一个广告的 Peripheral 设备可能需要很长时间。
- scanForPeripheralsWithServices 扫描时,必须指定 services,才能在后台模式中发现设备
//CoreBluetooth中指定services
NSMutableArray *servicesUUID = [NSMutableArray arrayWithObject:[CBUUID UUIDWithString:@"FFF0"]];
[central scanForPeripheralsWithServices:servicesUUID options:nil];
//BabyBluetooth中指定services
NSMutableArray *servicedUUID = [NSMutableArray arrayWithObject:[CBUUID UUIDWithString:@"FFF0"]];
//设置babybluetooth运行时参数
[baby setBabyOptionsWithScanForPeripheralsWithOptions:nil connectPeripheralWithOptions:nil scanForPeripheralsWithServices:servicedUUID discoverWithServices:nil discoverWithCharacteristics:nil];
- CBAdvertisementDataLocalNameKey广告key值会被忽略,Peripheral端的本地名不会被广告
- CBAdvertisementDataServiceUUIDsKey键的所有服务的UUID都被放在一个”overflow”区域中,它们只能被那些显示要扫描它们的网络设备发现。
- 如果多个应用在后台广告,则 Peripheral 设备发送广告包的时间间隔会变长。
根据程序是否在Info.babyBluetooth中的CBCentralManager的构造会有所区别。
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
//蓝牙power没打开时alert提示框
[NSNumber numberWithBool:YES],CBCentralManagerOptionShowPowerAlertKey,
//重设centralManager恢复的IdentifierKey
@"babyBluetoothRestore",CBCentralManagerOptionRestoreIdentifierKey,
nil];
if ([backgroundModes containsObject:@"bluetooth-central"]) {
//后台模式
bleManager = [[CBCentralManager alloc]initWithDelegate:self queue:nil options:options];
}else{
//非后台模式
bleManager = [[CBCentralManager alloc]initWithDelegate:self queue:nil];
}