问题描述
我想创建一个Garmin可穿戴式应用程序(数据字段),该应用程序将使用蓝牙LE(Garmin上的BluetoothLowEnergy API和iOS上的CoreBluetooth)与我的iOS应用程序通信。 Garmin API的局限性-它只能用作中央设备,因此我将iPhone配置为充当“虚拟”外围设备(我用自己的调试应用程序和LightBlue对其进行了测试)。
我设法在Garmin Vivoactive 3音乐和iPhone之间建立了连接,但是仍然存在一些问题,使其无法正常工作。
在Garmin可穿戴设备上,我设法搜索,查找并配对了设备(我的iPhone虚拟外设),以使self.pairedDevice = BluetoothLowEnergy.pairDevice(scanResult)
和BluetoothLowEnergy.getPairedDevices().next()
都不返回空值。
我遇到的问题是,从未在Garmin设备上调用此回调:
function onConnectedStateChanged(device,connectionState) {
if (connectionState==BluetoothLowEnergy.CONNECTION_STATE_CONNECTED) {
displayString = "Connected";
}
if (connectionState==BluetoothLowEnergy.CONNECTION_STATE_disCONNECTED) {
displayString = "disconnected";
}
}
此外,在发现虚拟外设时,我可以在广告数据中看到可用的服务,但是一旦设备配对,调用device.getServices()
将返回一个空的迭代器。
我已经检查过BluetoothLowEnergy.getAvailableConnectionCount()
是3,所以连接数限制应该没有问题。有什么办法可以强制连接吗?
在iOS上,我会执行以下操作:
let service = CBMutableService(type: serviceCbuuid,primary: true)
let writeableCharacteristic = CBMutableCharacteristic(type: characteristicCbuuid,properties: [.write],value: nil,permissions: [.writeable])
service.characteristics = [writeableCharacteristic]
currentService = service
peripheralManager = CBPeripheralManager(delegate: self,queue: dispatchQueue.global(qos: .userInteractive))
然后我使用currentService
添加peripheralManager?.add(currentService)
,并在didAdd service
回调中通过调用peripheral.startAdvertising(options)
开始广告。
也许我错过了iOS上的某些设置才能使其正常工作?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)