如何解决Garmin可穿戴设备与iOS设备之间的BLE通信
我想创建一个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 举报,一经查实,本站将立刻删除。