我是蓝牙和CoreBluetooth的新手,正在尝试创建一个测试应用程序:
动态性质不必是立即/实时的,但接近实时会很好。互动将是一个奖励。
本质上,id喜欢本地的多播等效项,而无需依赖任何连接或中心。对于我的应用程序用例,不需要中央和外围设备来协商连接。所有数据都被广播,匿名化并只能读取。
但是,每当我尝试从发现的外围设备查询服务时,它的服务为零,它说我必须连接到它以发现其特征。
2020-03-19 12:27:15.842128-0400 no-go[374:89822] [CoreBluetooth] API MISUSE: <CBPeripheral: 0x17d925b0, identifier = <UUID HERE>, name = SERVICE_NAME, state = disconnected> can only accept commands while in the connected state
是否可以在iOS上创建具有动态更新的广播模式GAP服务,并对其进行动态更新?
或者我是否误解了Centrals和连接,是否可以反复地动态地进行超轻量级的连接?
我当前的尝试设置:
2个广播的iOS设备共享的2个“硬编码”特征UUID
每个广播iOS设备都会为特征ID创建一个CBMutableCharacteristic
-每个ID都具有只读和nil值,期望稍后会[[动态更新。
CBPeripheralManager
来广播服务每个设备创建一个CBCentralManager
以发现特定服务UUID的其他广播者
self.centralManager.scanForPeripherals(withServices: [ self.service ], options: nil)
print("Started Listening")
设备通过中央代理方法发现彼此何时处于活动状态(应用启动):
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
但是,我发现的外围设备无法自省,上面出现未连接错误。欢迎任何指针
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)
委托方法内,检查central.state == .poweredOn
2。)然后检查外围设备是否尚未连接并连接到外围设备:
if peripheral.state == .disconnected {
central.connect(peripheral, options: nil)
}