You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:24:28