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 (将#修改为@)