1.app收不到蓝牙返回的数据。
需要把写的特征值的通知权限设置为true
bluetoothGatt.setCharacteristicNotification(characteristicF2, true);
2.断开蓝牙连接。
有时候会发现调用disconnect断开蓝牙连接时无法搜索到此设备,当连接断开后要调closeGatt释放资源,不用调disconnect,也 不 要下次复用之前的gatt来reconnect,因为有的手机上重连可能会存在问题,比如重连后死活发现不了service。这种情况下, 最 好只要断开连接就close gatt,下次连接时打开全新的gatt,这样就可以发现service了。
3.蓝牙返回数据问题。
蓝牙返回数据为byte[]的形式,当里面的值超过了byte的取值范围时就会出现问题,比如255就变成了-1,别担心,我们可以直接 这个数据把它转换成十六进制(其实蓝牙返回的就是十六进制数据)再把十六进制数据转换成十进制就变为原来的数据了。
4.蓝牙连接问题。
一个主设备(例如Android手机)可以同时连接多个从设备(一般为6个,例如智能硬件。超过就连接不上了),一个从设备只能被一个 主设备连接,一旦从设备连接上主设备,就停止广播,断开连接则继续广播。在任何时刻都只能最多一个设备在尝试建立连接。 如果同时对多个蓝牙设备发起建立Gatt连接请求。如果前面的设备连接失败了,则后面的设备请求会被永远阻塞住,不会有任何 连 接回调。所以建议:如果要对多个设备发起连接请求,最好是一个接一个的顺序同步请求管理。
5.蓝牙发送数据问题。
对蓝牙设备的操作不能并行,只能串行,即每次都要在收到上一个操作的回调后才能继续下一个操作。但是断开连接例外,断开 连接要马上closeGatt,不用等任务队列中的其他操作了。而且要给所有正在执行或者准备执行的任务都cancel。
6.多次刷新扫描后无法搜索到蓝牙设备。
有时候我们频繁调用 bluetoothAdapter.startLeScan 大概5次以后就无法扫描到设备了,原因是频繁操作,需要在调用 bluetoothAdapter.stopLeScan最少2秒后再进行bluetoothAdapter.startLeScan操作。