<template>
<view></view>
</template>
<script>
import {mapState} from 'vuex';
let main, receiver, filter;
let _codeQueryTag = false;
export default {
data() {
return {
scanCode: ''
}
},
computed: {
...mapState({
action: state => state.broadcastSettings.broadcastSettings.action,
tag: state => state.broadcastSettings.broadcastSettings.tag
})
},
created: function(option) {
this.initScan()
this.startScan();
},
onHide: function() {
this.stopScan();
},
destroyed: function() {
/*页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果*/
this.stopScan();
},
methods: {
initScan() {
let _this = this;
main = plus.android.runtimeMainActivity(); //获取activity
let IntentFilter = plus.android.importClass('android.content.IntentFilter');
filter = new IntentFilter();
//filter.addAction(this.action); // 换你的广播动作
filter.addAction("android.intent.ACTION_DECODE_DATA")
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: (context, intent) => {
plus.android.importClass(intent);
main.sendBroadcast(intent);
let saction = intent.getAction();
//let code = intent.getStringExtra(this.tag); // 换你的广播标签
let code = intent.getStringExtra("barcode_string"); // 换你的广播标签
console.log('before before before',this.action,saction,this.tag,"barcode",code);
code = code.replace(/\\000026/g, '');
// try
// {
// let barcodeBytes = intent.getByteArrayExtra("barcode");
// let barcode = this.byteToString(barcodeBytes);
// console.log('byte before', barcodeBytes,barcode);
// }
// catch(e){
// console.log(e)
// }
_this.queryCode(code);
}
});
},
byteToString(arr) {
if (typeof arr === 'string') {
return arr;
}
var str = '',
_arr = arr;
for (var i = 0; i < _arr.length; i++) {
var one = _arr[i].toString(2),
v = one.match(/^1+?(?=0)/);
if (v && one.length == 8) {
var bytesLength = v[0].length;
var store = _arr[i].toString(2).slice(7 - bytesLength);
for (var st = 1; st < bytesLength; st++) {
store += _arr[st + i].toString(2).slice(2);
}
str += String.fromCharCode(parseInt(store, 2));
i += bytesLength - 1;
} else {
str += String.fromCharCode(_arr[i]);
}
}
return str;
} ,
startScan() {
console.log("register")
main.registerReceiver(receiver, filter);
},
stopScan() {
console.log("unregister")
main.unregisterReceiver(receiver);
},
queryCode(code) {
//防重复
if (_codeQueryTag) return false;
_codeQueryTag = true;
setTimeout(function() {
_codeQueryTag = false;
}, 150);
let id = code
console.log('id:', id)
uni.$emit('scancodedate', {
code: id
})
}
}
}
</script>
<style lang="scss">
</style>
0 个回复