uniapp+pda实现广播读取扫码数据
·
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>
更多推荐
所有评论(0)