Flutter 蓝牙集成踩坑

1,674 阅读3分钟

蓝牙相关功能

1、RFID读卡

2、点巡检仪的参数和配置

3、巡检内容(包括获取特征值、录音波形)

4、点巡检仪OTA

5、临时采集

6、体检报告





蓝牙的基本流程



1、打开手机蓝牙开关,开始搜索周边设备

2、点巡检仪开机,发送服务广播,

3、手机根据名字匹配到点巡检仪,然后connect

4、手机根据uuid找到对应的service,然后找到service下具有读、写、notify对应权限的特征值

5、手机使用对应的特征值跟点巡检仪进行数据交互



开发流程







补充

1、项目使用的readWithResonce模式跟点巡检蓝牙模块进行交互,手机需要主动write请求,然后主动read相应结果,如果响应包比较大,手机需要多次读取(轮训或者递归两种方式)

2、创建蓝牙blueManager的同时,开始蓝牙开关的监听,如果蓝牙开关关闭,需要释放资源和暂停当前的交互流程

注意

1、蓝牙4.2及以下 MTU是185,高版本蓝牙 MTU 是517(实际跟蓝牙硬件有很大关系,不一定是517),项目中可以通过接口动态获取设备MTU,然后设置后续某些数据交互的数据包大小,实际设置中可以稍小点,以免报错

2、ios端不允许设置MTU,SDK会和周边设备自动协商两者MTU的最小值

3、iphone 8之后使用蓝牙5.0版本,可以向下兼容低版本蓝牙

4、在app开始搜索之前,最好先检查一下系统定位服务有木有开启,进行页面提示

异常处理

1、蓝牙断开监听,弹窗提醒用户断开

2、read 超时处理设置为5s,因为有些蓝牙硬件传输速度跟距离有很大关系,距离稍远就会导致read超时,如果不抓超时异常,await read 会一直阻塞住当前线程,等下次read读的数据可能会是新的指令返回的结果

OTA流程

1、点击同步数据,请求后台ota升级接口,如果后台返回needUpdate == true,则下载最新升级包; 或者检查到本地版本号为空,也需要下载升级包

2、监听蓝牙设备是否链接,连接成功回调中,手机向点巡检发送ota_get_param 指令,若返回的版本号于本地存储版本不同并且本地版本号不为空,则弹出是否升级对话框,点击确定开始升级,

3、首先向点巡检仪器发送ota_update, 然后开始read数据,若返回code == 200,开始 递归上传升级包数据,UI显示升级进度条,每write一包数据,就read一包数据,解析结果,若code == 200,则弹窗提示升级成功

4、通过监听蓝牙开关状态,若升级过程监测到手机蓝牙关闭,则隐藏蓝牙升级进度条,并且结束升级功能,重新打开开关后,需重复上传过过程