2026.04.28今天我学习了如何使用pda进行广播读取扫码数据一、通用组件pda-scan.jslet 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