android ble 某些手机连接不上,又不知道什么原因,填坑吧

本文探讨了Android设备与BLE设备连接时遇到的问题,包括不同机型的onServiceDiscovered耗时差异导致的数据丢失风险,Read/Write操作的异步性质引起的同步问题,以及Android手机对BLE设备Services的缓存问题。提出了解决方案,如建立ACK机制,使用RequestQueue确保请求顺序执行,刷新设备Services缓存等。此外,还提到了Android不同版本的BLE扫描和连接限制,以及Android开发中的最佳实践。
摘要由CSDN通过智能技术生成

for(BluetoothGattDescriptor dp:characteristic().getDescriptors()) {

dp.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);

mBluetoothGatt().writeDescriptor(dp);

}

3… 不同的机型的discoverService到onServiceDiscovered之间的耗时长短不一,这会导致一个问题:如果蓝牙硬件设备支持离线传输,即有记忆功能,连接上之后多久发送之前的数据的问题。如果连接之上立即发送,那么手机端的onServiceDiscovered尚未触发,这样Characteristic的值就获取不了(因为你的service,Characteristic都尚未初始化好),从而导致失败。

解决的办法有3个:

1)建立一套ACK机制,蓝牙硬件设备不断的广播,直到所有的数据都收到返回的ACK确认才不再广播即可。

2)更好的办法是,当手机端onServiceDiscovered触发后,并且service,Characteristic都初始化好后,发送指令给蓝牙硬件设备(即writeCharacteristic)表示手机端已经准备好,可以发送数据给我了,蓝牙硬件设备收到后再发送数据,这样能很好的保证数据不丢失。

  1. 最好的办法是1)和 2)的结合,即发送准备好的指令,然后让智能硬件发送数据,然后在接收数据的过程中,使用ACK机制确保数据没有任何丢失。

4… Read/Write Characteristic/Descriptor 等都是异步的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值