更新记录

v1.0(2026-04-10)

PDA 广播扫码(Honeywell / 通用)

uni-app 打包的 Android App 中,通过 系统广播(Broadcast) 接收工业 PDA / 扫码枪解码结果,不依赖 DCloud 付费扫码原生插件。默认适配 Honeywell 等机型常见 Intent 输出;若你的设备使用自定义 Action / Extra 字段,可通过本地存储扩展。



平台兼容性

PDA 广播扫码(Honeywell / 通用)

uni-app 打包的 Android App 中,通过 系统广播(Broadcast) 接收工业 PDA / 扫码枪解码结果,不依赖 DCloud 付费扫码原生插件。默认适配 Honeywell 等机型常见 Intent 输出;若你的设备使用自定义 Action / Extra 字段,可通过本地存储扩展。


适用环境

平台 说明
App-Android 支持(需 plus.android
App-iOS 不支持(无广播扫码场景)
H5 / 小程序 不支持;调用接口会安全返回 null,不会崩溃


安装

  1. 将本插件目录 uni_modules/pda-broadcast-scan 放入你的 uni-app 工程 uni_modules 下(或通过插件市场导入)。
  2. 按下方「接入步骤」修改 main.js 与业务页。

接入步骤

1. 在 main.js 启动广播引擎(推荐)

在应用启动时注册一次广播接收器,避免首屏扫码遗漏:

import { startPdaScanBroadcastEngine } from '@/uni_modules/pda-broadcast-scan/js_sdk/pda-broadcast-scan/pdaHoneywellBroadcast.js'

function bootPdaScanBroadcast() {
  if (typeof plus === 'undefined' || !plus.android) return
  try {
    startPdaScanBroadcastEngine()
  } catch (e) {
    console.warn('[PDA Scan] boot', e)
  }
}
if (typeof document !== 'undefined') {
  document.addEventListener('plusready', bootPdaScanBroadcast)
}
setTimeout(bootPdaScanBroadcast, 0)
setTimeout(bootPdaScanBroadcast, 400)

也可省略上述代码,仅在调用 initScan 时懒加载引擎(插件内部会 startPdaScanBroadcastEngine)。

2. 在页面中绑定扫码回调

推荐使用统一入口:

import {
  getHoneywellScanPluginNow,
  bindHoneywellScan,
  unbindHoneywellScan,
  stopScanThenRebindForTriggerMode
} from '@/uni_modules/pda-broadcast-scan/js_sdk/pda-broadcast-scan/index.js'

const plugin = getHoneywellScanPluginNow()
if (plugin) {
  bindHoneywellScan(plugin, (res) => {
    const code = res && res.code
    console.log('条码:', code)
  })
}

// 页面卸载时取消监听
unbindHoneywellScan(plugin)

注意:

  • initScan 的回调请使用 同步函数(避免在回调里写复杂异步链导致异常吞没)。
  • 「按下扫码、松开停止」类设备:扫码一次后如需继续监听,可使用 stopScanThenRebindForTriggerMode(plugin, onScan),避免重复叠加监听(详见源码注释)。

3.(可选)扩展广播 Action / Extra 键名

若设备文档要求自定义广播 Action 或 Intent Extra 字段名,可在运行时使用 uni.setStorageSync 写入 JSON 字符串数组:

Storage Key 值示例 含义
pda_scan_broadcast_actions_json ["com.vendor.SCAN_RESULT"] 额外监听的 Action(会与内置列表合并去重)
pda_scan_broadcast_extra_keys_json ["data","my_barcode"] 额外尝试读取的 Extra 键名

也可在代码中引用常量(避免手写字符串笔误):

import { PDA_SCAN_BROADCAST_STORAGE_KEYS } from '@/uni_modules/pda-broadcast-scan/js_sdk/pda-broadcast-scan/index.js'

uni.setStorageSync(PDA_SCAN_BROADCAST_STORAGE_KEYS.ACTIONS_JSON, JSON.stringify(['com.xxx.ACTION']))

设备侧设置(重要)

请在 PDA 扫描设置 中将输出方式设为 Intent / 广播,并开启 附带解码数据(常见文案:Data、字符串、附加字段等)。若广播不带任何条码数据,日志中会出现 [PDA Scan] 广播 Intent 未附带条码 类提示,此时应用无法解析,需先改设备端输出配置。


API 概要

导出 作用
startPdaScanBroadcastEngine() App 级注册广播(建议 main.js 调用一次)
getHoneywellPdaScan() 返回带 initScan / stopScan / removeAllEventListeners 的插件对象
getHoneywellScanPluginNow() 同上,封装 try/catch,非 App 返回 null
bindHoneywellScan(plugin, onScan, replace?) 绑定扫码回调;replace=true 时会先移除全部监听再绑定
unbindHoneywellScan(plugin) 移除监听
stopScanThenRebindForTriggerMode(plugin, onScan) 触发模式:停止后延迟再绑定,防双层监听
getScanBroadcastActions / getScanBroadcastExtraKeys 读取当前 Storage 中的扩展配置
PDA_SCAN_BROADCAST_STORAGE_KEYS Storage 键名常量

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。