FlutterBluePlus 使用流程
1. 设置扫描结果、扫描状态监听器
late StreamSubscription<List<ScanResult>> _scanRetsSubscription;
late StreamSubscription<bool> _isScanningSubscription;
@override
void initState() {
super.initState();
print('_Task2PageState.build 设置监听器');
_scanRetsSubscription = FlutterBluePlus.scanResults.listen((rets) {
_scanRets = rets;
print(rets.toString());
if(mounted){
setState(() {
});
}
}, onError: (err){
print("scan error: $err");
});
_isScanningSubscription = FlutterBluePlus.isScanning.listen((event) {
if(mounted){
setState(() {
});
}
});
}
2.扫描BLE设备
try{
var divisor = Platform.isAndroid ? 8:1;
await FlutterBluePlus.startScan(
timeout: const Duration(seconds: 15),
continuousUpdates: true,
continuousDivisor: divisor
);
}catch (e){
print("Stop Scan. Error: $e");
}
3.选择相应的蓝牙设备进行操作
3.1 监听蓝牙连接状态
@override
void initState() {
super.initState();
_connectionStateSubscription = device.connectionState.listen((state) async {
_connectionState = state;
if(state == BluetoothConnectionState.connected){
_services = [];
}
if(mounted){
setState(() {
});
}
});
}
3.2 蓝牙连接
device.disconnect();
3.3 获取服务集
_services = await device.discoverServices();
3.4 从服务集里面找到 特定的服务
3.4.1 从 服务中的特性集里面 找到 读、写特性
3.4.2 订阅读特性,并监听通道信息
@override
void initState() {
super.initState();
for (var itemC in service.characteristics) {
if(itemC.uuid.str.toLowerCase().compareTo("49535343-8841-43f4-a8d4-ecbe34729bb3") == 0){
writeC = itemC;
print('_InteractionPageState.initState 找到写特性');
}else if(itemC.uuid.str.toLowerCase().compareTo("49535343-1e4d-4bd9-ba61-23c647249616") == 0){
readC = itemC;
print('_InteractionPageState.initState 找到读特性');
}
}
readC.setNotifyValue(true);
rcListen = readC.onValueReceived.listen((value) {
_value = value;
print('_InteractionPageState.initState mounted:$mounted rec value:$value');
if(mounted){
setState(() {
});
}
});
}
3.4.3 通过写特性向连接设备发送消息
await _writeC?.write(data, withoutResponse: _writeC!.properties.writeWithoutResponse);