1 前言
安卓蓝牙开发属于软硬件交互过程,在通信过程中难免出现一些意想不到的bug,本篇文章将介绍由于延时问题引发的一些bug。
2 关闭搜索延时
通常情况下,在连接设备之前要关闭手机的蓝牙搜索功能,但是当调用cancleDiscovery()或者stopLeScan()方法停止搜索设备时,并不能瞬间完成停止搜索工作。因此,在发起连接之前最好等待一段时间,等待手机关闭搜索后在发起连接。
3 扫描服务延时
当onConnectionStateChange()方法回调时,其中参数newState == BluetoothGatt.STATE_CONNECTED时,此时表面设备已经连接上,此时,应调用discoverServices()方法扫描服务。
但是在实际使用中发现:若设备蓝牙刚切换至广播状态,手机端搜索到设备发起连接。当连接成功时,马上去扫描设备服务,偶尔会出现服务获取失败的情形。因此,当设备连接上,需要加上几百毫秒延时之后在调用discoverServices()方法。
4 监听成功,发送命令延时
在进行Ble蓝牙开发时,需要在开启UUID监听之后才能回调onCharacteristicChanged()方法。在测试过程中偶尔出现notify成功后马上发送数据给设备,但是设备无响应。因此通常开发过程中,向设备发送指令前加上一段延时程序,保证设备处于可响应状态。
5 结语
在蓝牙开发中由于延时引发的问题很多,目前主要发现的延时bug有以上几种,欢迎大家留言讨论。