Flutter中蓝牙开发:flutter_blue_plus的应用理解

Flutter中蓝牙开发:flutter_blue_plus的应用理解

蓝牙的原理(基于flutter_blue_plus的理解)

设备

手机设备能够识别到两种蓝牙设备:

1.系统设备(手机系统连接或配对过的设备,类型为 BluetoothDevice

2.扫描设备(现时现地扫描到的设备,类型为ScanResult

扫描设备是会不断地向外发送广播数据来供手机发现,因此我们看ScanResult

dart 复制代码
class ScanResult {
  final BluetoothDevice device; //扫描到的蓝牙设备对象
  final AdvertisementData advertisementData; //设备的广播数据包
  final int rssi;
  final DateTime timeStamp;

  ScanResult({
    required this.device,
    required this.advertisementData,
    required this.rssi,
    required this.timeStamp,
  });
}

其中就包含系统设备的类型BluetoothDevice属性,而且还包括广播的AdvertisementData属性;我们来简单看一下AdvertisementData包含什么东西:

dart 复制代码
class AdvertisementData {
  final String advName;
  final int? txPowerLevel;
  final int? appearance; // not supported on iOS / macOS
  final bool connectable;
  final Map<int, List<int>> manufacturerData; // key: manufacturerId
  final Map<Guid, List<int>> serviceData; // key: service guid
  final List<Guid> serviceUuids;
  
  AdvertisementData({
    required this.advName,
    required this.txPowerLevel,
    required this.appearance,
    required this.connectable,
    required this.manufacturerData,
    required this.serviceData,
    required this.serviceUuids,
  });
}

在广播数据类中简单包含蓝牙设备的信息,我们可以获取设备的电量以及设备支持的服务UUID列表来帮助我们后期有过滤设备需求。

BluetoothDevice类的属性和方法详见flutter_blue_plus插件,代码太多了不好贴,简单来说我们后续的连接蓝牙设备以及蓝牙通信都是调用他其中的方法。因此不管是扫描到的设备或者是系统有记录的设备都能够点击进行连接,有点像手机蓝牙中的可用设备。所以系统设备能够帮助我们快速连接设备。

服务

在对蓝牙设备进行通信之前,作为新手通过看文章以及官方示例代码大致了解到了一些。我的理解:蓝牙设备(Device)通过发广播的形式,告诉手机其的存在。手机接收到广播后获取到设备的基本信息,然后建立连接。蓝牙设备本身对外提供了很多服务(Services),每个服务下又有很多特征值(Characteristics)(特征值有读、写、订阅的功能,其中订阅就是不断接收通知)这里举个水平仪的例子,水平仪的x,y不断变化就是通过通知把这个变化的值传给手机的;然后特征值下还有描述符(Descriptors),描述符同样也有读、写的功能,对描述符进行写可以操作特征值的是否订阅的功能,同时描述符还用来描述特征值。知道他们大致的关系就行,接下来BluetoothDevice为我们提供了所有相关方法。

另外做了一个测试,在对水平仪的某个特征值进行写入十六进制(Hex)字符串后,能够切换水平仪的显示状态,更理解了蓝牙通信的作用。

相关推荐
getapi1 小时前
在 Google Play 上更新你已上架的 Flutter 应用
flutter·googlecloud·web app
奋斗的小青年!!3 小时前
Flutter跨平台开发适配OpenHarmony:文件系统操作深度实践
flutter·harmonyos·鸿蒙
西西学代码4 小时前
Flutter---路径管理器项目
flutter
奋斗的小青年!!4 小时前
Flutter跨平台开发OpenHarmony应用:个人中心实现
开发语言·前端·flutter·harmonyos·鸿蒙
LawrenceLan4 小时前
Flutter 零基础入门(十五):继承、多态与面向对象三大特性
开发语言·前端·flutter·dart
Rysxt_4 小时前
Flutter与UniApp底层逻辑深度对比
flutter·uni-app
奋斗的小青年!!7 小时前
OpenHarmony Flutter 穿梭框组件深度实践与优化
flutter·harmonyos·鸿蒙
走在路上的菜鸟9 小时前
Android学Flutter学习笔记 第五节 Android视角认知Flutter(插件plugins)
android·学习·flutter
奋斗的小青年!!10 小时前
Flutter开发OpenHarmony打卡进度环组件:实现与跨平台兼容性实践
flutter·harmonyos·鸿蒙