添加qs-scanlistener模块,支持通过广播和键盘输入方式获取扫码结果 更新manifest.json添加abiFilters配置 重构easycode.vue使用新的扫码模块替代原生扫码
101 lines
2.7 KiB
Vue
101 lines
2.7 KiB
Vue
<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> |