-
Notifications
You must be signed in to change notification settings - Fork 1k
后台模式
liuyanwei edited this page Sep 29, 2015
·
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设备可能需要很长时间。
- 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];
}