【第二一天 - Flutter Blue 蓝芽文件说明】

前言

官方套件使用范例

想带大家认识 Flutter Blue 套件 怎麽使用。
了解里面的参数。

蓝牙中具体有些哪些:蓝牙名字(name)蓝芽装置(device)蓝牙信号强度(riss)蓝牙服务(service) 蓝牙服务下面又有小服务。

蓝芽物件介绍

BluetoothState 蓝芽状态

可以去监听 Stream = FlutterBlue.instance.state
BluetoothState

  • unknown, // 未知状况,通常我设定这个为初始值
  • unavailable, // 不存在蓝芽
  • unauthorized, // 未授权
  • turningOn, // 正在开启
  • on, // 已经开启
  • turningOff, // 正在关闭
  • off // 已经关闭

ScanResult 蓝芽装置资讯

可以去监听 Stream = FlutterBlue.instance.scanResults

  • rssi
  • advertisementData
    发出广播封包的装置,其中广播封包包含装置的 MAC 位址也可以有其他额外的资料,像是 device name等...。
  • device(BluetoothDevice)
    • name // 装置名称
    • id // 装置 id
    • type(BluetoothDeviceType) // 装置的状态
    • services // 装置服务
    • mtu // 监听 MTU (byte 为单位)
    • state // 监听装置的状态
    • isDiscoveringServices 监听搜寻服务
    • discoverServices() // 从新搜寻服务
    • disconnect() // 取消连接服务
    • connect() 连接服务
    • requestMtu() // 请求改变 Mtu 大小, (IOS 不支援)

BluetoothService

当搜寻到 ScanResult 拿到里面的 device 後。
stream: device.services,
BluetoothService

  • uuid
  • deviceId
  • isPrimary
  • characteristics
  • includedServices

欢迎上官网了解GATT参数

想要监听已经连蓝芽的状态

可以每 2 秒监听 Devices 这样子。
Stream.periodic(Duration(seconds: 2)).asyncMap((_) => FlutterBlue.instance.connectedDevices),

用法

初始化蓝芽

FlutterBlue flutterBlue = FlutterBlue.instance;

开始搜寻蓝芽

// Start scanning
flutterBlue.startScan(timeout: Duration(seconds: 4));

// Listen to scan results
var subscription = flutterBlue.scanResults.listen((results) {
    // do something with scan results
    for (ScanResult r in results) {
        print('${r.device.name} found! rssi: ${r.rssi}');
    }
});

// Stop scanning
flutterBlue.stopScan();

连接、中断 蓝芽

// Connect to the device
await device.connect();

// Disconnect from device
device.disconnect();

启用 BlueTooth Service

List<BluetoothService> services = await device.discoverServices();
services.forEach((service) {
    // do something with service
});

读写 characteristics

https://pub.dev/packages/flutter_blue#read-and-write-characteristics

var characteristics = service.characteristics;
for(BluetoothCharacteristic c in characteristics) {
    List<int> value = await c.read();
    print(value);
}

// Writes to a characteristic
await c.write([0x12, 0x34])

读写 descriptors

https://pub.dev/packages/flutter_blue#read-and-write-descriptors

// Reads all descriptors
var descriptors = characteristic.descriptors;
for(BluetoothDescriptor d in descriptors) {
    List<int> value = await d.read();
    print(value);
}

// Writes to a descriptor
await d.write([0x12, 0x34])

Set notifications and listen to changes

https://pub.dev/packages/flutter_blue#set-notifications-and-listen-to-changes

await characteristic.setNotifyValue(true);
characteristic.value.listen((value) {
    // do something with new value
});

读取 MTU and 请求更改 Mtu size

https://pub.dev/packages/flutter_blue#read-the-mtu-and-request-larger-size

final mtu = await device.mtu.first;
await device.requestMtu(512);

Refrence

flutter_blue 套件
GATT
参数


<<:  [Day - 20] - Spring 一日优雅组态配置就上手

>>:  其它的 lifecycle 或 vue router 的 hook

[ 卡卡 DAY 29 ] - React Native iOS 打包步骤及离线 jsbundle产生

因为实在有太多东西想分享了,但已经 29 天了 我们先来个 iOS 打包步骤 完成开发後再来就是要...

[Day28] 正规表达式 Regular Expression

这几天写 String methods 的时候,在句法里发现(regexp)这个词,查了一下原来是 ...

ASP.NET Core 3 起布置在 Windows IIS 方式改变

最近要升级 windows 服务器的 ASP.NET Core 2.1 专案到 3.1 版本,发现 ...

Multicasting for RxJava

在进入正题之前先让大家看看在 Reactive Programming 中的一种使用案例: val ...

Day30-结语

参赛心得 很感动终於到了最後一天,虽然之前已经参加过两次了,但可能因为这次是边工作边参加,所以比我预...