flutter蓝牙通信,flutter蓝牙通讯
flutter 蓝牙开发遇到的坑
flutter 蓝牙开发遇到的坑
创新互联是专业的辛集网站建设公司,辛集接单;提供网站设计制作、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行辛集网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
最近在做个flutter蓝牙功能,用的flutter_blue,在iOS上没有任何问题,照着例子写完,正常运行蓝牙功能,但是在安卓上发现各种坑,用这个插件首先是有些设备拿不到设备名称,还有就是读写特征和ios上拿到的也不一样。折腾好久,最后在github上找到外国友人给出的方案,就是用flutter_bluetooth_serial这个插件可以解决以上问题,就试了一下,结果真可以解决问题,而且这个用法感觉比flutter_blue 更强大,不需要通过读写特征值进行通讯,直接就能通过connection写入和接收数据。做下记录,希望能帮到有同样问题的人。因为我在遇到问题时,百度了全是不能解决问题的办法。
flutter 蓝牙ble(blue tooth),同时连接多台/多个设备
于是就有了写作本文的动力,--------解决同时连接多台蓝牙设备!!!
flutter_blue 适合于单台的蓝牙设备,使用起来简单
flutter_reactive_ble 适合于单台的蓝牙设备,多台蓝牙设备也可以用
flutter_ble_lib 适合于单台的蓝牙设备,多台蓝牙设备也可以用,可以在模拟器上进行调试蓝牙
感觉后2个第三方库都可以使用,本人先入为主使用了flutter_reactive_ble,所以本文以flutter_reactive_ble为基础进行介绍
先声明4个全局变量,后面会用到
开始扫描
如果扫描过程,不使用过滤条件,withServices这个参数可以给个空数组
停止扫描如下
连接设备
断开设备,
每连接成功一个设备后,就会产生一个_connectionStreamSubscription,对应设备的断开,就用对应的StreamSubscription去断开, 可以用一个HashMap,去记录 连接成功的设备 与 StreamSubscription 的对应关系
去扫描服务,并过滤服务,扫描结果服务里面是包含有特征的数组,如: serviceId:[fff0,fff1,fff2,fff3,...]
去监听上报来的数据,参数来自前面扫描到的结果serviceId--服务ID, characteristicId--特征ID,deviceId--设备ID
后面就是各位看官根据自己的需求去做逻辑处理啦。
对设备设置命令,发送请求(写操作),list为整形数据,要写的数据
读取设备的信息(读操作)
flutter 多台蓝牙设备同时连接的分享就到这里喽,小伴们,觉得有点用的话,或者已经看到这里面来的请点个赞吧~~ 后续分享更多有关flutter的文章。如果有疑问的话,请在下方留言~
过一段时间后,我在项目把这个蓝牙库用起来了,基本能满足日常需求.效果如下:
Flutter 集成第三方蓝牙库踩坑记录
最近在写flutter应用,需要集成蓝牙功能,用了一个第三方的库,踩了一些坑,做一下记录。
这是库的地址 PhilipsHue/flutter_reactive_ble: Flutter library that handles BLE operations for multiple devices. (github.com)
安卓主要的坑就是,在使用蓝牙功能的时候,需要获取定位权限,这个需要动态获取。
集成之后,编译出错,提示Swift Compiler Error。
(1)首先尝试,修改对应三方库的Swift编译版本。
我这边尝试修改,没有成功。
(2) 没办法,我这边手动修改三方库的源码文件,进行修复。重新编译成功。
其他问题
Flutter 蓝牙插件 flutter_blue 坑点记录
Android:
添加蓝牙/定位权限
文件地址:Flutter项目文件夹/android/app/src/main/java/AndroidManifest.xml
iOS:
添加蓝牙权限
文件地址:Flutter项目文件夹/ios/Runner/Info.plist
运行Flutter 在Android端安装的时候Androidstudio提示这个错误:
原因:出现这个错误的原因是我引入的第三方库最低支持版本高于我的项目的最低支持版本,异常中的信息显示:我的项目的最低支持版本为,而第三方库的最低支持版本为x),所以抛出了这个异常。
解决办法:文件地址:Flutter项目文件夹/android/app/src/main/java/AndroidManifest.xml
中添加
问题出现在Android端,连接蓝牙设备后,匹配特征值的时候
报:set_notification_error,编写描述符时出错。
原因:
我个人的分析,设备是使用标准的Android API用于蓝牙,必须等待回调,该回调表明之前的GATT操作已完成(onDescriptorWrite),直到可以编写下一个描述符以启用特征通知。也就是程序有个通过特征性UUID比较的工作顺序,由于信号不好,或者是信号缓冲之类的原因,造成蓝牙可能流程一步一步走不下来。
解决:
setNotifyValue(true) 添加延时操作
网站标题:flutter蓝牙通信,flutter蓝牙通讯
文章出自:http://scyanting.com/article/dsidepg.html