android蓝牙通信协议 android蓝牙开发框架( 三 )


1 在所有蓝牙的回调中不要操作UI 。我是不会告诉你我是怎么发现这个坑的 。
2 在所有的蓝牙回调中不要执行耗时操作 。
3 发送数据要等到上一条数据发送成功后再发下一条数据 , 毕竟BLE设备运算没有手机快 , 这里可以推荐一个开源蓝牙连接工具https://github.com/NordicSemiconductor/Android-nRF-Toolbox,里面非常好的对发送的数据做了一个数据队列 。
4 合理的控制扫描过程 , 一般出现133错误的时候重连就可以先去扫描再去连接 。若扫描不到时不要马上又去扫描 , 不然你把手机放那一夜 , 把设备远离它 , 第二天回来看手机时会惊喜的发现手机没电自动关机了
遇到的坑
1 断线重连的时候总是报133错误,
断线后不要马上去连接.先扫描设备 , 扫描到设备后再去连接 。
2 扫描不到设备
手动关闭蓝牙再打开蓝牙开关 。这个可能是重连里面的扫描引起的 , 如果设备未在周边 , 一直去扫描的话,后来设备在身边也可能扫描不到设备 。如果未能连接设备 , 也不能一直去扫描 。扫描不到设备时说明设备并不到周边 , 可以延迟多少时间后再去扫描
3 连接设备后发送数据 , 发送数据的回调函数也已经走了 。没有接收到数据
查看设置特征值的描述值
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)mBluetoothGatt.writeDescriptor(descriptor)的回调里面是不是回调成功了4反复断开蓝牙后再重连导致连接失败
断开蓝牙后应该调用close() *** 释放资源.连接时应该设置超时 , 在超时时间内继续去连接,基本低、中、高端机都能重新连接上 。
5 连接上之后自动断开连接 , 重连上之后又自动断开连接 , 如此反复 。
我们的BLE设备在某些低端机会遇到这种问题 。听固件工程师说是BLE设备蓝牙芯片频率和手机蓝牙频率问题 , 需调BLE设备频率 。遇到这种问题APP就束手无策了 。
6 反复操作断开和连接导致系统蓝牙挂掉(无响应)
基本也是没有合理释放资源导致
7 调用扫描操作导致APP无响应
查看系统蓝牙是否挂掉了 。基本和问题6类似
最后附上一个Nordic 公司开源的Android蓝牙开发封装好的库地址
https://github.com/NordicSemiconductor/Android-BLE-Library
参考:http://www.cnblogs.com/cxk1995/p/5693979.html

秒懂生活扩展阅读