Flutter安卓应用开发:扫描蓝牙时仅显示蓝牙打印机的方法
如何在Flutter中仅过滤蓝牙打印机设备
蓝牙打印机大多依赖串口服务(SPP),对应的标准UUID为 00001101-0000-1000-8000-00805F9B34FB。你可以通过两种方式过滤出这类设备:
方法1:扫描时直接指定服务UUID(推荐)
在启动扫描时,通过withServices参数只扫描包含目标服务的设备,减少无效设备返回,提升效率:
import 'package:esc_pos_utils/esc_pos_utils.dart'; import 'package:flutter_blue/flutter_blue.dart'; FlutterBlue flutterBlue = FlutterBlue.instance; void findDevices() { // 蓝牙打印机常用的串口服务(SPP)标准UUID const printServiceUuid = Guid("00001101-0000-1000-8000-00805F9B34FB"); flutterBlue.startScan( timeout: const Duration(seconds: 4), withServices: [printServiceUuid], // 仅扫描包含该服务的设备 ); flutterBlue.scanResults.listen((results) { setState(() { scanResult = results; }); }); flutterBlue.stopScan(); }
方法2:在扫描结果中过滤
如果部分打印机未在广播中暴露服务UUID,可先获取所有扫描结果,再过滤包含目标服务的设备:
import 'package:esc_pos_utils/esc_pos_utils.dart'; import 'package:flutter_blue/flutter_blue.dart'; FlutterBlue flutterBlue = FlutterBlue.instance; void findDevices() { const printServiceUuid = Guid("00001101-0000-1000-8000-00805F9B34FB"); flutterBlue.startScan( timeout: const Duration(seconds: 4), ); flutterBlue.scanResults.listen((results) { setState(() { // 过滤出包含SPP服务UUID的设备 scanResult = results.where((result) { return result.advertisementData.serviceUuids.contains(printServiceUuid); }).toList(); }); }); flutterBlue.stopScan(); }
补充说明
- 少数特殊厂商的打印机可能使用自定义服务UUID,若上述方法无法覆盖,可查询对应厂商文档获取UUID并添加到过滤列表。
- 若设备未广播服务UUID,需先连接设备,再通过
device.discoverServices()查询设备支持的服务,判断是否包含打印相关服务。
内容的提问来源于stack exchange,提问作者Manu Varghese
相关产品推荐
相关产品推荐

