Files
klp-mono/apps/hand-factory/components/klp-scaner/klp-scaner.vue
砂糖 3650d87a34 feat(scanlistener): 添加PDA扫码模块支持广播和键盘输入
添加qs-scanlistener模块,支持通过广播和键盘输入方式获取扫码结果
更新manifest.json添加abiFilters配置
重构easycode.vue使用新的扫码模块替代原生扫码
2025-12-25 15:48:21 +08:00

101 lines
2.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<uni-popup ref="pdaScanPopup" type='center'>
<view>扫码提示</view>
请对准二维码或条形码扫描查看结果
<button>取消</button>
</uni-popup>
</view>
</template>
<script>
export default {
name: "klp-scaner",
data() {
return {
pdaScaning: false,
main: null,
indent: null
};
},
onHide: function() {
if (uni.getSystemInfoSync().platform === 'android') {
this.stopScan();
}
},
destroyed: function() {
// 页面退出时一定要卸载监听,否则下次进来时会重复造成扫一次出2个以上的结果
if (uni.getSystemInfoSync().platform === 'android') {
this.stopScan();
}
},
created() {
if (uni.getSystemInfoSync().platform === 'android') {
this.init();
}
},
methods: {
init() {
this.main = plus.android.runtimeMainActivity(); //获取activity
let context = plus.android.importClass('android.content.Context'); //上下文
let receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: this.doReceive
});
this.receiver = receiver;
let IntentFilter = plus.android.importClass('android.content.IntentFilter');
let Intent = plus.android.importClass('android.content.Intent');
let filter = new IntentFilter();
filter.addAction("nlscan.action.SCANNER_RESULT"); //监听扫描,根据设备的广播动作进行更换
// filter.addAction("android.intent.action.SCANRESULT"); //监听扫描,根据设备的广播动作进行更换
this.doS(receiver, filter);
},
doS(receiver, filter) {
this.main.registerReceiver(receiver, filter);
},
doReceive(context, intent) {
//通过intent实例引入intent类方便以后的.’操作
console.log(indent);
plus.android.importClass(intent);
let barcodeData = intent.getStringExtra("SCAN_BARCODE1"); //获取扫描结果
// let barcodeData = intent.getStringExtra("value"); //获取扫描结果
let barcodeType = intent.getIntExtra("SCAN_BARCODE_TYPE", -1); //获取扫码类型
if (this.pdaScaning) {
uni.$emit('scan', {
code: barcodeData
})
}
},
stopScan() {
this.main.unregisterReceiver(this.receiver);
},
startScan(mode = 'camera') {
if (mode == 'camera') {
uni.scanCode({
success(res) {
resolve(res.result);
this.$emit('scan', res.result)
},
fail() {
reject()
}
})
} else if (mode == 'pda') {
this.pdaScaning = true;
this.$refs.pdaScanPopup.open()
// 等待对应的广播消息,收到广播消息后返回扫码结果,
}
}
},
closePdaScanPopup() {
this.pdaScaning = false;
this.$refs.pdaScanPopup.close()
}
}
</script>
<style>
</style>