前言
我们知道PDA(优博讯)设置模块-输出方式 有键盘方式输出 和广播输出
①.键盘方式输出,直接调用uniapp的文本框回车能拿到扫描的值
②.广播输出需开发些额外代码,需获取【广播动作】A和【广播数据标签】B。以下讲解用A与B指代了
问题点:PDA是基恩士牌子(PDA设置模块-广播方式输出),从浏览器测试是OK的。安装apk后需扫2次才获取到值。解决方案:采用广播方式输出
先贴2张图,这里是优博讯的扫描设置
1、定义扫描工具类scanCode.js
let main;
let filter;
let receiver;
let tag = false;
/**
* 开始广播监听扫码
*/
const start = () => {
/* #ifdef APP-PLUS */
main.registerReceiver(receiver, filter);
/* #endif */
}
/**
* 停止广播监听扫码
* that:传this;
*/
const stop = () => {
/* #ifdef APP-PLUS */
main.unregisterReceiver(receiver);
/* #endif */
}
/** 剩余下个变量已经做了全局变量
*
* 定义广播
* that:传this;
*/
const init = (onReceive) => {
/* #ifdef APP-PLUS */
//获取activity
main = plus.android.runtimeMainActivity();
const IntentFilter = plus.android.importClass('android.content.IntentFilter');
filter = new IntentFilter();
// 扫描设置的广播名称A(上面指代了)
filter.addAction("android.intent.ACTION_DECODE_DATA");
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function(context, intent) {
plus.android.importClass(intent);
// 扫描设置的标签名称B(上面指代了)
const code = intent.getStringExtra("barcode_string");
if (tag) return;
tag = true;
setTimeout(function() {
tag = false;
}, 150);
//到这里扫描成功了,可以调用自己的业务逻辑,code就是扫描的结果 return出code进行业务处理
onReceive && onReceive(code);
}
});
/* #endif */
}
export const broadcastScan = {
init,
start,
stop,
};
2.挂在vue原型链上 ,在main.js
import {broadcastScan} from '@/common/scanCode'
Vue.prototype.$broadcastScan=broadcastScan
3.调用函数获取扫描的值
onLoad(option){
this.$broadcastScan.init(this.getScancode);
},
onUnload() {
this.$broadcastScan.stop();
},
onHide() {
this.$broadcastScan.stop();
},
onShow() {
this.$broadcastScan.start();
},
methods:{
getScancode(code){
// 有些PDA会自带换行符,trim函数处理下
code=code.trim()
//code就是扫描获取的值
console.log(code)
},
}