Skip to content
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

虽然应用在后台时,我们可以执行很多蓝牙相关任务,但应用在前后台运行还是会有所区别

bluetooth-central区别

  1. CBCentralManagerScanOptionAllowDuplicatesKey扫描选项会被忽略,同一个Peripheral端的多个发现事件会被聚合成一个发现事件。
  2. 如果扫描Peripheral设备的多个应用都在后台,则Central设备扫描广告数据的时间间隔会增加。结果是发现一个广告的Peripheral设备可能需要很长时间。

bluetooth-peripheral区别

  1. CBAdvertisementDataLocalNameKey广告key值会被忽略,Peripheral端的本地名不会被广告
  2. CBAdvertisementDataServiceUUIDsKey键的所有服务的UUID都被放在一个”overflow”区域中,它们只能被那些显示要扫描它们的网络设备发现。
  3. 如果多个应用在后台广告,则Peripheral设备发送广告包的时间间隔会变长。

CBCentralManager构造的区别。

根据程序是否在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];
    }