更新记录

1.0.0(2026-04-10) 下载此版本

smart_school_uhf


平台兼容性

HbuilderX/cli最低兼容版本
3.0.0

HBuilderX插件通用注意事项

HBuilderX-2.7.12以下版本安装插件市场内的插件后,卸载时需手动卸载,详细教程参考:如何手动卸载插件


智慧校园 UHF RFID 插件使用说明 (SmartSchool-UHF)

本插件为定制开发的 PDA UHF RFID uni-app 原生插件,主要用于在 uni-app 移动端项目中集成硬件 PDA 的 RFID 标签盘点与读取功能。

1. 插件配置与引入

1.1 插件目录结构

在您的 uni-app 项目根目录下,需保证包含以下文件结构(注意是放在 src/nativeplugins 目录下,以便通过 Vite 复制或被 HBuilderX 识别):

src/nativeplugins/
└── SmartSchool-UHF/
    ├── package.json               # 插件配置文件
    └── android/
        ├── uniplugin_uhf-release.aar  # 插件主产物
        ├── App_Demo_API.jar           # 硬件厂商依赖
        ├── DeviceAPIverxxx.jar        # 硬件厂商依赖
        ├── ModuleAPI_J.jar            # 硬件厂商依赖
        ├── UHF67_v3.6.jar             # 硬件厂商依赖
        ├── logutil-1.5.1.1.jar        # 硬件厂商依赖
        └── reader(1).jar              # 硬件厂商依赖

1.2 manifest.json 配置

在 uni-app 项目的 manifest.json 中,需要在 app-plus -> nativePlugins 节点下声明本插件:

"app-plus": {
  "nativePlugins": {
    "smart_school_uhf": {}
  }
}

注意: 如果使用 Vue3/Vite 构建项目,在 HBuilderX 云打包前,确保上述 nativeplugins 文件夹已存在于打包输出根目录(如 dist/build/app/nativeplugins)。


2. API 接口说明

在页面/组件中,通过以下方式引入插件:

// 注意:引入的模块名称必须和 package.json 中配置的 module name 保持一致
const uhfPlugin = uni.requireNativePlugin('smart_school_uhf')

2.1 初始化模块 (initModule)

用于初始化 UHF RFID 硬件模块并设置默认功率。

uhfPlugin.initModule({}, (res) => {
  if (res.code === 0) {
    console.log('初始化成功:', res.msg)
  } else {
    console.error('初始化失败:', res.msg)
  }
})

2.2 开启盘点 (startInventory)

开启硬件模块的异步循环读取模式。盘点到的标签数据将通过全局事件 onUhfInventory 持续返回。

uhfPlugin.startInventory({}, (res) => {
  if (res.code === 0) {
    console.log('开启盘点成功:', res.msg)
  } else {
    console.error('开启盘点失败:', res.msg)
  }
})

2.3 停止盘点 (stopInventory)

停止标签读取循环。

uhfPlugin.stopInventory({}, (res) => {
  if (res.code === 0) {
    console.log('停止盘点成功:', res.msg)
  }
})

2.4 关闭模块 (closeModule)

关闭并释放硬件模块资源。建议在页面卸载或 App 退出时调用。

uhfPlugin.closeModule({}, (res) => {
  console.log('模块已关闭:', res.msg)
})

3. 全局事件监听 (接收标签数据)

在开启盘点(startInventory)后,插件底层会通过 fireGlobalEventCallback 持续向前端发送读取到的标签数据。前端需要注册一个全局事件监听器来接收数据。

监听事件名:onUhfInventory

// 在 Vue 组件的 onLoad 或 onMounted 中注册监听
plus.globalEvent.addEventListener('onUhfInventory', (event) => {
  const epc = event.epc;   // 标签的 EPC 编码 (十六进制字符串)
  const rssi = event.rssi; // 信号强度

  console.log('读取到标签:', epc, '信号强度:', rssi);

  // TODO: 在这里处理您的业务逻辑,例如将 EPC 加入列表并去重
});

// 在 Vue 组件的 onUnload 或 onBeforeUnmount 中移除监听,防止内存泄漏
plus.globalEvent.removeEventListener('onUhfInventory');

4. 完整使用示例 (Vue 3 语法)

<template>
  <view>
    <button @click="initUHF">1. 初始化设备</button>
    <button @click="startRead">2. 开始扫描</button>
    <button @click="stopRead">3. 停止扫描</button>
    <view>
      <text>已扫描标签:</text>
      <view v-for="(tag, index) in tagList" :key="index">
        EPC: {{ tag.epc }} | RSSI: {{ tag.rssi }}
      </view>
    </view>
  </view>
</template>

<script setup>
import { ref, onMounted, onUnmounted } from 'vue'

const uhfPlugin = uni.requireNativePlugin('smart_school_uhf')
const tagList = ref([])

// 初始化设备
const initUHF = () => {
  uhfPlugin.initModule({}, (res) => {
    uni.showToast({ title: res.msg, icon: res.code === 0 ? 'success' : 'none' })
  })
}

// 开启扫描
const startRead = () => {
  uhfPlugin.startInventory({}, (res) => {
    console.log('扫描状态:', res.msg)
  })
}

// 停止扫描
const stopRead = () => {
  uhfPlugin.stopInventory({}, (res) => {
    console.log('扫描状态:', res.msg)
  })
}

// 监听回调处理函数
const handleInventory = (event) => {
  const { epc, rssi } = event
  // 简单去重逻辑
  const exists = tagList.value.find(item => item.epc === epc)
  if (!exists) {
    tagList.value.push({ epc, rssi })
  }
}

onMounted(() => {
  // 注册全局事件监听
  if (typeof plus !== 'undefined') {
    plus.globalEvent.addEventListener('onUhfInventory', handleInventory)
  }
})

onUnmounted(() => {
  // 移除监听并关闭模块
  if (typeof plus !== 'undefined') {
    plus.globalEvent.removeEventListener('onUhfInventory', handleInventory)
  }
  if (uhfPlugin) {
    uhfPlugin.closeModule({}, () => {})
  }
})
</script>

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。