创建【scanCode.vue】文件
核心代码如下:
<template>
<view></view>
</template>
<script>
let _httpLoading = false
export default {
data() {
return {
main: null,
receiver: null,
intentFilter: null
}
},
created() {
this.initScan()
this.startScan();
},
onHide() {
this.stopScan();
},
destroyed() {
//页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果/
this.stopScan();
},
methods: {
initScan() {
let _this = this;
this.main = plus.android.runtimeMainActivity(); //获取主activity
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
this.intentFilter = new IntentFilter();
this.intentFilter.addAction('android.intent.ACTION_DECODE_DATA') // 广播动作
this.receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function (context, intent) {
plus.android.importClass(intent);
let code = intent.getStringExtra('barcode_string'); // 广播标签
this.queryCode(code)
}
});
},
startScan() {
this.main.registerReceiver(this.receiver, this.intentFilter);
},
stopScan() {
this.main.unregisterReceiver(this.receiver);
},
queryCode(code){
// 有些PDA会自带换行符,trim函数处理下
code = code.trim()
if (_httpLoading) return;
_httpLoading = true;
setTimeout(() => {
_httpLoading = false
}, 200)
uni.$emit('SCAN_CODE', {
code
})
}
}
}
</script>
<!-- 使用方法: 1.引入组件 2.在onShow\onLoad 时,uni.$on('SCAN_CODE',(res)=>{ 这是扫描到的条形码:res.code }) -->
优博讯或者其他具有扫描功能的设备,参考上一篇文章进行设置:intent输出