flutter 蓝牙开发记录

摘要:
返回设备ID列表//您可以提前注册以扫描收听事件FlutterBlueflatterBlue=FlutterBlue。例子输出到uisetState((){this._blueDevice.add(r);防止多个扫描操作报告错误)FlutterBlueflatterBlue=FlutterBlue.instance;

记录自己开发蓝牙通信功能过程

插件使用:flutter_blue

蓝牙硬件:hc-08 

在代码之前需要设置蓝牙权限和位置权限

1:扫描蓝牙设备,返回 deviceid 列表

  

  
//可以提前注册扫描监听事件
FlutterBlue flutterBlue = FlutterBlue.instance; List<String> blueId = []; flutterBlue.scanResults.listen((results) {// do something with scan results for (ScanResult r in results) { if(!blueId.contains(r.device.id.id)) { blueId.add(r.device.id.id);       //添加到集合,输出到ui setState(() { this._blueDevice.add(r); }); } } });
//开始扫描,(扫描前先停止扫描,防止多次执行扫描动作时报错)
FlutterBlue flutterBlue = FlutterBlue.instance; flutterBlue.stopScan().then((value){ flutterBlue.startScan(timeout: Duration(seconds: 4));     });

2:找到自己需要连接的蓝牙设备

(我这里是hc-08模块,通过连接电脑设置蓝牙名称,扫描时会有名称出现)

3:连接蓝牙设备,这里可以停止扫描蓝牙设备动作

  
//device 为第二步中选择的蓝牙设备
print('开始连接'); await device.connect(); print('连接成功');

4:扫描设备服务

BluetoothCharacteristic mCharacteristic;
    device.discoverServices().then((services) {
      setState(() {
        this._services = services;
      });
    });
//services是一个列表,每一个service又对应多个 Characteristics

一个设备 device 里面有多个服务 service ,这么多个service干嘛的,我不知道,只知道其中uuid 包含有 FFE0 的就是我们需要使用的读写的服务

5:找到服务,找到对应的 Characteristic,进行读写操作

  //接受消息(读取消息)
  await char.setNotifyValue(true);
      Utf8Codec decode = new Utf8Codec();
      char.value.listen((val) {
        print('接受到消息:${val}');
        List<int> list2 = val.map((e) => e as int).toList();
        String msg  = String.fromCharCodes(list2);
        setState(() {
          this.receiveData.add(msg);
        });
      });
//写消息 (withoutResponse 参数不设置默认false,在android端发送消息正常,但是ios不行,设置为true后,都正常 

char.write(msg, withoutResponse: true);

ps:

1:打包需要设置,否则可能又bug https://www.cnblogs.com/liumang/p/14800305.html

2:android 需要注意,有些设备蓝牙状态读取正常,但是不能进行扫描,需要关掉蓝牙再重新打开

(我在oppo手机上碰到这个问题,一度查问题查到自闭)

3:项目位置 (https://github.com/liumang8691/flutter_blue_map.git)

免责声明:文章转载自《flutter 蓝牙开发记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kafka命令axios 处理超时问题 记录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

day45---计算机安全项目(癞蛤蟆)

计算机安全项目(癞蛤蟆) 攻击原理解析 """ 一、什么是dll 动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL) 是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。 这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 ".drv"(...

C#打造秒杀腾讯的仿QQ界面,从此独孤求败

【jehnjehn原创文章,欢迎转载,但请保留原文链接】本文CSDN地址:http://blog.csdn.net/jehnjehn/article/details/7521529           首先,这标题夸张了些。但我可以向毛主席保证夸张不是目的,我只是有目的地夸张:为了证明C#(.NET平台)其实有多么的强大,为了证明C# WinForm仿QQ...

Android蓝牙操作笔记

蓝牙是一种支持设备短距离传输数据的无线技术。android在2.0以后提供了这方面的支持。 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1.设置权限 在manifest中配置  Xml代码   <uses-permission android:name="android.permission.BLUETOOTH"/>...

使用事件和消息队列实现分布式事务(转+补充)

虽然本文并非笔者原创,但是我们在非强依赖的事务中原理上也是采用这种方式处理的,不过因为没有仔细去总结,最近在整理和总结时看到了,故转载并做部分根据我们实际情况的完善和补充。 不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下,...

.NET实现微博粉丝服务平台接口

【文章摘要】Senparc.Weixin.MP虽然是微信公众号的SDK,但由于易信公众号和新浪微博粉丝服务平台也提供了微信兼容接口,所以也可以使用其快速实现相应的服务,当然微博由于与微信存在差异,如果不改动原始SDK,则需要对一些地方进行调整。本文使用Senparc.Weixin.MP快速实现新浪微博粉丝服务平台的接口。 【文章索引】 新浪微博粉丝服务平...

Knative 实战:基于 Kafka 实现消息推送

作者 | 元毅 阿里云智能事业群高级开发工程师 导读:当前在 Knative 中已经提供了对 Kafka 事件源的支持,那么如何基于 Kafka 实现消息推送呢?本文作者将以阿里云 Kafka 产品为例,给大家解锁这一新的姿势。 背景 消息队列 for Apache Kafka 是阿里云提供的分布式、高吞吐、可扩展的消息队列服务。消息队列 for Apa...