在连接到Android上的绑定BLE设备时遇到问题。 包括绑定的设备的第一个连接是成功的,我可以读取所有的特征,连接保持稳定。 当我杀了应用程序或手动断开连接,并尝试再次使用相同的代码,除了绑定本身连接到设备,我从Android端断开连接,错误代码22,这意味着“连接被本地主机终止”。 在这两种情况下,我不知道Android平台下有没有什么区别? 我使用的基本上是我可以提供的教程代码,如果有必要,但我已经基本上尝试了所有从更改gatt参数到自动连接/不,添加BluetoothDevice.TRANSPORT_LE作为传输标志,什么都没有。 这个问题不断发生在我的Pixel,Moto G4和所有最新的Nexus设备上。 外设使用高通芯片CSR1010 uEnergy,是广告,需要配对才能建立连接。 以下是连接内容的片段: val bondCreated = device.createBond() 在邦定状态改变的广播接收机中,我调用连接方法。 我试图用这两种方法试验,省略一个和另一个,改变参数,但没有 bluetoothGatt = device.connectGatt(context, false, gattCallback, BluetoothDevice.TRANSPORT_LE) bluetoothGatt?.connect() 如果我收到断开信息,我打电话给: bluetoothGatt?.close() bluetoothGatt?.disconnect() 我尝试再次使用上面相同的代码连接 我已经试图在每一个gatt的操作上都拖延,但仍然没有成功。 在Android断开连接后将自动连接更改为true不起作用。 我也尝试了一些第三方iOS应用程序,所有这些连接到设备没有问题。 他们的Android版本总是与我的方式断开连接。 你能提供任何帮助吗? 这将是最高度赞赏。 日志在这里: D / BleGattController:DEVICE ALREADY BONDED:设备 D / BluetoothGatt:connect() – 设备:40:80:08:AF:DC:6B,auto:false D / BluetoothGatt:registerApp() D / BluetoothGatt:onClientRegistered() – status = 0 clientIf […]
我正在长时间写一个BLE进行OTA更新,但是我需要等待BLE设备的写入响应来发送更多的数据,但是我不知道如何捕获设备写入响应,我使用Android 7的三星galaxy标签s2和Kotlin代码 override fun otaDataWrite(data:ByteArray) { manager.connection?.flatMap { rxBleConnection: RxBleConnection? -> rxBleConnection?.createNewLongWriteBuilder() ?.setCharacteristicUuid(OTACharacteristics.OTA_DATA.uuid) ?.setBytes(data) ?.setMaxBatchSize(totalPackages) ?.build() }?.subscribe({ t: ByteArray? -> Log.i("arrive", "data ${converter.bytesToHex(t)}") manageOtaWrite() }, { t: Throwable? -> t?.printStackTrace() }) 每次我编写特性的订阅都会立即用写入的数据来响应我,我需要捕获特性的响应,为了发送更多的数据