2026.04.28今天我学习了如何使用pda进行广播读取扫码数据
一、通用组件
pda-scan.js
let mainActivity; // 运行时的主要活动activity let intentFilter; // 实例化的意图过滤器 let broadcastReceiver; // 广播接收器 let repeatFlag = false; // 初始化定义广播 const init = (onReceiveCallback) => { /* #ifdef APP-PLUS */ if (typeof plus === 'undefined') { console.log('plus对象未准备好,无法初始化PDA扫描'); return; } try { mainActivity = plus.android.runtimeMainActivity(); const IntentFilter = plus.android.importClass('android.content.IntentFilter'); intentFilter = new IntentFilter(); intentFilter.addAction("android.intent.ACTION_DECODE_DATA");//不同pds设备需要修改的地方 // 这里的 onReceive 就是文档里的 doReceive 函数 broadcastReceiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', { onReceive: function (context, intent) { // ✅ 文档里的关键代码:导入intent类 + 取barcode_string plus.android.importClass(intent); var barcodeStr = intent.getStringExtra("barcode_string");//不同pds设备需要修改的地方 console.log('✅ 扫码成功,结果:', barcodeStr); // 防重复 if (repeatFlag) return; repeatFlag = true; setTimeout(() => repeatFlag = false, 150); // 把结果传给业务回调 onReceiveCallback && onReceiveCallback(barcodeStr); } }); setScannerMode(0); // 扫码模式设置(之前加的) console.log('PDA扫描初始化成功'); } catch (error) { console.log('PDA扫描初始化失败:', error); } /* #endif */ }; // ------------------------------ // ✅ 新增:设置PDA扫码模式(你文档里的功能) // mode: 0=自动模式 1=连扫模式 2=手动模式 // ------------------------------ const setScannerMode = (mode = 0) => { /* #ifdef APP-PLUS */ try { const Intent = plus.android.importClass("android.content.Intent"); const intent = new Intent("com.android.broadcast.uscanner.settings"); // 文档固定写法 intent.putExtra("keyInt", -13); intent.putExtra("valueInt", mode); mainActivity.sendBroadcast(intent); console.log(`✅ 已设置PDA扫码模式:${mode === 0 ? '自动模式' : mode === 1 ? '连扫模式' : '手动模式'}`); } catch (e) { console.log("设置扫码模式失败", e); } /* #endif */ }; // 开始广播监听扫码 const start = () => { /* #ifdef APP-PLUS */ if (!mainActivity || !broadcastReceiver) return; try { mainActivity.registerReceiver(broadcastReceiver, intentFilter); console.log('PDA扫描监听已开始'); } catch (error) { console.log('开始监听失败', error); } /* #endif */ }; // 停止广播监听扫码 const stop = () => { /* #ifdef APP-PLUS */ try { mainActivity && broadcastReceiver && mainActivity.unregisterReceiver(broadcastReceiver); } catch (error) { } /* #endif */ }; // 主动触发扫描 const triggerScan = () => { /* #ifdef APP-PLUS */ try { let Intent = plus.android.importClass("android.content.Intent"); let intent = new Intent("com.scan.onStartScan"); mainActivity.sendBroadcast(intent); } catch (error) { } /* #endif */ }; export const broadcastScan = { init, start, stop, triggerScan, setScannerMode, // 导出,外面也可以调用 };二、页面使用
<template> <view></view> </template> <script> import {broadcastScan} from '../../utils/pda-scan'; export default{ data(){ }, onLoad(){ broadcastScan.init(this.get_scan_code);//初始pda设备 broadcastScan.setScannerMode(2);//手动模式 }, onShow() { broadcastScan.start(); }, onUnload() { broadcastScan.stop(); }, onHide() { broadcastScan.stop(); }, methods:{ get_scan_code(code) { console.log(code,'扫描成功的值') }, } } </script>