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

Flutter:如何使用Honeywell CK65安卓手持设备读取标准条码

针对Honeywell CK65 Flutter条码扫描的实现方案

方案一:快速测试(键盘Wedge模式)

CK65默认支持键盘Wedge模式——扫描后的条码内容会模拟键盘输入,直接填入当前获焦的输入框。这种方式无需额外依赖,适合快速验证扫描功能:

  1. 先确认设备设置:进入Settings > Scanning > Scanner Input,选择Keyboard Wedge模式。
  2. 在Flutter项目中编写监听输入的代码:
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('CK65条码测试')),
        body: const Center(child: BarcodeInput()),
      ),
    );
  }
}

class BarcodeInput extends StatefulWidget {
  const BarcodeInput({super.key});

  @override
  State<BarcodeInput> createState() => _BarcodeInputState();
}

class _BarcodeInputState extends State<BarcodeInput> {
  final TextEditingController _controller = TextEditingController();

  @override
  void initState() {
    super.initState();
    // 监听输入变化,扫描完成后打印条码
    _controller.addListener(() {
      final barcode = _controller.text.trim();
      if (barcode.isNotEmpty) {
        print('扫描到条码: $barcode');
        _controller.clear(); // 清空输入框,方便下次扫描
      }
    });
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      controller: _controller,
      autofocus: true, // 自动获焦,确保扫描内容能输入进来
      decoration: const InputDecoration(
        hintText: '扫描条码到此处',
        border: OutlineInputBorder(),
      ),
      // 若扫描后设备自动触发回车,可通过onSubmitted监听
      onSubmitted: (value) {
        print('扫描完成: $value');
        _controller.clear();
      },
    );
  }
}

方案二:专业集成(Honeywell Flutter插件)

如果需要更稳定的扫描控制(无需依赖输入框焦点、可自定义扫描类型),可以使用Honeywell官方适配的Flutter插件:

  1. 添加依赖到pubspec.yaml:
dependencies:
  honeywell_scanner: ^2.0.0

执行flutter pub get完成依赖安装。

  1. 配置Android权限(CK65为Android设备):
    在android/app/src/main/AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="com.honeywell.decode.permission.DECODE" />
  1. 编写扫描逻辑代码:
import 'package:flutter/material.dart';
import 'package:honeywell_scanner/honeywell_scanner.dart';

void main() => runApp(const MyApp());

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> implements ScannerCallback {
  HoneywellScanner? scanner;
  String? scannedBarcode;

  @override
  void initState() {
    super.initState();
    // 初始化扫描器
    scanner = HoneywellScanner(this);
    // 配置扫描规则:仅启用标准条码,关闭二维码
    scanner?.setProperties(ScannerProperties(
      code39Enabled: true,
      code128Enabled: true,
      upcAEnabled: true,
      upcEEnabled: true,
      qrCodeEnabled: false,
    ));
  }

  @override
  void onDecoded(String? result) {
    setState(() => scannedBarcode = result);
    print('扫描到条码: $result');
  }

  @override
  void onError(Exception error) {
    print('扫描错误: ${error.toString()}');
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('CK65条码扫描')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(scannedBarcode ?? '等待扫描...'),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: () => scanner?.startScanner(),
                child: const Text('开始扫描'),
              ),
              ElevatedButton(
                onPressed: () => scanner?.stopScanner(),
                child: const Text('停止扫描'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    scanner?.stopScanner();
    scanner?.dispose();
    super.dispose();
  }
}

注意事项

  • 测试前先用设备自带的扫描应用验证硬件功能是否正常;
  • 键盘Wedge模式适合快速验证,插件模式更适合生产环境开发;
  • 若使用插件,需确保CK65的系统版本满足插件要求(一般Android 8.0+即可)。

内容的提问来源于stack exchange,提问作者TheMortiestMorty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:17:35