更新记录

1.0.0(2026-10-21)

1:发布扫码UTS插件,精简API


平台兼容性

uni-app(3.8.6)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android Android插件版本 iOS 鸿蒙
√ √ × × √ √ 5.0 1.0.0 × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.0)

Chrome Safari Android Android插件版本 iOS 鸿蒙 微信小程序
× × 5.0 1.0.0 × × ×

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

极简的通用安卓扫码插件

1. 简介

本插件为仅支持安卓平台的PDA原生插件。它基于PDA的扫码软件,接受PDA扫码的广播信息,然后发送到业务代码里。
目前已经测试主流的PDA,包括东集、idata、斑马、商米、思必拓、汉德霍尔、优博讯等产品,理论上兼容市面上所有PDA。
请先使用测试程序按照下图进行测试:
下载测试程序地址1:http://8.147.128.38/download/testScan.apk
下载测试程序地址2:http://www.99magician.xyz:81/download/testScan.apk

如果PDA为东集、idata、斑马、商米、思必拓、汉德霍尔、优博讯品牌。可以直接按扫码键测试。
如果为非以上品牌,需要在页面上输入与内置扫码软件一致的“广播动作”、“数据标签”进行设置。
注意::: 斑马PDA直接修改“DataWedge”中的“Profile0(default)”配置文件,将“intent输出”启用,同时将“intent操作”设置为"com.symbol.datawedge.DWDEMO",将“intent类别”设置为空。"Intent交付"改为"广播 Intent"

2. 使用流程

  1. 检查PDA的扫码设置,需要将输出方式设置为intent输出。
  2. 设置intent的广播动作、广播字符串数据标签
  3. 编写相应代码,参考示例代码
  4. 扫码获取结果
  5. 插件已经内置广播动作、数据标签的PDA品牌如下: 东集、idata、斑马、商米、思必拓、汉德霍尔、优博讯
  6. 插件已经内置扫码事件为"getScanData"

3. 示例代码

<template>
  <view>
    <view>
      <view>广播动作:<input v-model.trim="action" placeholder="请输入扫码设置里的广播动作"></view>
      <view>数据标签:<input v-model.trim="label" placeholder="请输入扫码设置里的广播字符串数据标签"></view>
      <view style="text-align: center;">
        <button type="primary" @click="setup" style="width:100px;">设置</button>
        <button type="warn" @click="remove" style="width:100px;">移除</button>
      </view>
    </view>
    <view>初始化状态: {{inited ? '已注册' : '未注册'}}</view>
    <view>接收到信息次数: {{count}}</view>
    <view>接收到最新信息:</view>
    <view>{{msg}}</view>
  </view>
</template>

<script>
  // 引入 UTS 扫码插件(插件 ID:ammagician-uts-scan)
  import { init, addScanAction, removeScanAction, onScanCallback, offScanCallback, stop } from '@/uni_modules/ammagician-uts-scan'

  export default {
    data() {
      return {
        count: 0,
        msg: '',
        action: '',
        label: '',
        inited: false
      }
    },

    onLoad() {
      // 初始化:注册内置品牌 PDA 的广播监听(需自定义调试基座)
      this.inited = init()

      // 注册扫码回调,可多次触发
      onScanCallback(this.scanCallback)
    },

    onUnload() {
      // 移除回调并注销广播接收器
      offScanCallback()
      stop()
    },

    methods: {
      // 设置:添加自定义扫码 Action
      setup() {
        if (!this.action) {
          uni.showToast({ title: '请输入广播动作', icon: 'none' })
          return
        }
        if (!this.label) {
          uni.showToast({ title: '请输入数据标签', icon: 'none' })
          return
        }
        addScanAction(this.action, this.label)
        uni.showToast({ title: '已设置', icon: 'none' })
      },

      // 移除:移除自定义扫码 Action
      remove() {
        if (this.action) {
          removeScanAction(this.action)
        }
        uni.showToast({ title: '已移除', icon: 'none' })
      },

      // 扫码结果回调
      scanCallback(data) {
        this.count++
        this.msg = data && data.code ? data.code : ''
      }
    }
  }
</script>

4. 最佳实践

创建工具类,scanUtil.js

  import { init, addScanAction, removeScanAction, onScanCallback, offScanCallback, stop } from '@/uni_modules/ammagician-uts-scan'

  //init()初始化内置品牌PDA广播参数、默认扫码事件

  // 如果PDA为东集、idata、斑马、商米、思必拓、汉德霍尔、优博讯之外的牌子,需要设置扫码广播参数
  //addScanAction("android.intent.ACTION_DECODE_DATA","barcode_string")  //添加扫码action, 此两值需要同扫码软件的配置一致
  //removeScanAction("android.intent.ACTION_DECODE_DATA")  //移除扫码action

  //onScanCallback((res)=>{})  //初始化扫码监听函数
  //offScanCallback()  //移除扫码监听函数

  //stop()  //清理插件内部ScanAction,事件。需要重新调用init、onScanCallback

 const listeners = {}
 let isStart = false

  //注册事件
  export const addListener = function(name, method){
    listeners[name] = method
  }
  //移除事件
  export const removeListener = function(name){
    delete listeners[name]
  }

  export const clearListener = function(name){
    listeners = {};
  }

  //停止插件,重新开启需要执行init
  export const start = function(){
    if(isStart){
      return
    }
    init(); 
    //如果没有内置Action,需要在此添加
    //addScanAction("android.intent.ACTION_DECODE_DATA","barcode_string")  //添加扫码action, 此两值需要同扫码软件的配置一致
    onScanCallback((res)=>{
      for(var a in listeners){
        listeners[a](res)
      }
    })

    isStart = true
  }

  //停止插件,重新开启需要执行start
  export const destory = function(){
    stop(); 
    isStart = false
  }
</script>

页面A

<template>
  <div>
    <div>接收到信息次数: {{count}}</div>
    <div>接收到最新信息:</div>
    <div>{{msg}}</div>
  </div>
</template>

<script>
  import {start, destory, addListener, removeListener, clearListener} from './scanUtil.js';
  export default {
    data() {
      return {
        count: 0,
        msg: ''
      }
    },
    mounted() {
      //启动插件
      start();

      //在当前页面注册扫码事件
      addListener("scanForA", this.scanCallback)
    },

    beforeUnmount(){
      //移除当前页面扫码事件
      removeListener("scanForA")

      //移除所有的扫码监听事件。
      //clearListener()

      //停止插件, 重新开启需要执行start
      //destory()
    },

    methods:{
      scanCallback(data){
        this.count++;
        this.msg = data.code
      }
    }
  }
</script>

5. 联系方式

需要咨询的朋友也可以添加作者企鹅:‌壹‌壹‌玖贰玖‌陆零‌柒‌玖‌捌。或者***: ‌壹‌伍‌捌‌壹‌肆零‌叁‌贰‌玖‌陆‌玖,获得更快捷的服务支持。

隐私、权限声明

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

无

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

插件不采集任何数据

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

无

暂无用户评论。