更新记录

1.0.1(2026-02-02)

一、完善demo调用示例

1.0.0(2026-02-02)

  • 首发,仅支持 Android
  • 内部默认兼容 Zebra DataWedge 广播

平台兼容性

uni-app(4.75)

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

hl-pdascan-uts

功能说明

  • 基于 UTS 实现的 Android PDA 扫码广播监听插件
  • 默认兼容原 Zebra PDA(DataWedge 广播)

当前版本仅实现 Android,iOS / Harmony 暂未实现。

广播兼容

  • 广播 Action:com.dwexample.ACTION
  • 扫码数据字段:com.motorolasolutions.emdk.datawedge.data_string

如果你的 PDA 设备使用其他 Action 或字段名,可在后续版本中扩展为可配置。

API 说明(供直接调用时参考)

UTS 接口定义见 utssdk/interface.uts

export type HlPdaScanResult = {
  code : string
}

export type HlPdaScanCallback = (result : HlPdaScanResult) => void

export interface IHLPdaScanClient {
  start() : void
  stop() : void
  onScan(callback : HlPdaScanCallback) : void
}

export declare function getHlPdaScanClient() : IHLPdaScanClient

使用示例(uvue / vue3 页面完整示例)

下面是一个在 uni-app Vue3 / <script setup> 页面中使用本插件的完整示例,包含:

  • 页面 UI 展示最近一次扫码结果
  • 进入页面自动初始化客户端
  • 点击按钮开始监听 / 停止监听
  • 仅在 App-Android 下真正工作,其他平台给出友好提示
<template>
  <view class="content">
    <view class="title">ZEBRA PDA 扫码 Demo</view>

    <view class="row">
      <text class="label">最近一次扫码结果:</text>
      <text class="value">{{ scanCode || '(暂未扫码)' }}</text>
    </view>

    <view class="btn-row">
      <button type="primary" @click="startListen">开始监听 PDA 扫码</button>
    </view>
    <view class="btn-row">
      <button type="warn" @click="stopListen">停止监听</button>
    </view>
  </view>
</template>

<script setup lang="ts">
  // #ifdef APP-PLUS
  import * as HLPdaScan from '@/uni_modules/hl-pdascan-uts';
  // #endif
  import { ref } from 'vue';
  import { onLoad, onUnload } from '@dcloudio/uni-app';

  // 最近一次扫码结果
  const scanCode = ref('');

  // PDA 扫码客户端(保持单例)
  let client: ReturnType<typeof HLPdaScan.getHlPdaScanClient> | null = null;

  // 初始化客户端
  function initClient() {
    if (client) return;

    // #ifdef APP-PLUS
    client = HLPdaScan.getHlPdaScanClient();
    client.onScan((res) => {
      // res: { code: string }
      scanCode.value = res.code;
      console.log('ZEBRA PDA 扫码结果:', res.code);
    });
    // #endif
  }

  // 开始监听
  function startListen() {
    // #ifdef APP-PLUS
    initClient();
    if (client) {
      client.start();
    }
    uni.showToast({
      title: '已开始监听 PDA 扫码',
      icon: 'none',
    });
    // #endif

    // #ifndef APP-PLUS
    uni.showToast({
      title: '仅支持 App(Android) 运行',
      icon: 'none',
    });
    // #endif
  }

  // 停止监听
  function stopListen() {
    // #ifdef APP-PLUS
    if (client) {
      client.stop();
    }
    // #endif
  }

  // 页面生命周期
  onLoad(() => {
    initClient();
  });

  onUnload(() => {
    stopListen();
  });
</script>

<style scoped>
  .content {
    flex: 1;
    padding: 40rpx;
    display: flex;
    flex-direction: column;
  }
  .title {
    font-size: 36rpx;
    font-weight: bold;
    margin-bottom: 40rpx;
  }
  .row {
    flex-direction: row;
    display: flex;
    align-items: center;
    margin-bottom: 30rpx;
  }
  .label {
    font-size: 28rpx;
    color: #666;
  }
  .value {
    font-size: 30rpx;
    color: #333;
    margin-left: 10rpx;
  }
  .btn-row {
    margin-top: 20rpx;
  }
</style>

提示:如果你只想做简单测试,可以直接复制上面的页面代码,新建一个页面使用即可;
如果要集成到现有业务,只需要把 scanCodeonScan 回调里的逻辑,替换为你自己的业务处理即可。

隐私、权限声明

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

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

插件不采集任何数据

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

暂无用户评论。