我有一个iOS蓝牙应用程序,充当CBCentral并连接到另一个充当CBPeripheral。中央请求连接/断开外围设备的通知,并通知连接是否丢失,以便您知道外围设备是否已超出范围,如Tile和其他一些蓝牙定位器小工具。
应用程序通常按预期工作,但我注意到,当它运行时,通过蓝牙播放到我的汽车音响的音频被中断。它有节奏地切入和跳出,就像跳过记录一样。它发生在多个蓝牙播放应用程序(音乐和下传)。我想也许是新操作系统或我的新iPhone 6,但当我杀死我的应用程序时,症状消失了。
您如何测试和诊断此类干扰?仪器显示蓝牙系统已开启,但其他情况并不多。它不会在应用程序暂停时报告。我看到一些我将要调查的少量音频处理。否则,该应用程序在后台非常静止。
以下是我的应用目前正在做的事情:
在一台iOS设备上,它充当外围设备并宣传服务:
[self.peripheralManager startAdvertising:@{ CBAdvertisementDataServiceUUIDsKey: @[kServiceUUID], CBAdvertisementDataLocalNameKey: @"MyIdentifier"}];
当Central运行时,他会查找宣传此特性的设备,连接并请求通知(实际上并未订阅该特性):
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {
if (error) {
[self cleanup];
return;
}
for (CBCharacteristic *characteristic in service.characteristics) {
if ([characteristic.UUID isEqual:kSlaveDeviceUUID]) {
[peripheral setNotifyValue:YES forCharacteristic:characteristic];
}
}
}
我得到didUpdateNotificationStateForCharacteristic
回调等的适当回复
我可以关闭外围设备上的蓝牙,并通知它已消失,重新打开并重新连接,使设备超出范围并返回并获取通知,包括前台和后台。
这看起来很香草,但我必须遗漏一些重要的东西。