|
|
|
<template>
|
|
|
|
<view class="content"></view>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script lang="ts">
|
|
|
|
import {
|
|
|
|
onLoad,
|
|
|
|
onShow,
|
|
|
|
onHide,
|
|
|
|
onUnload
|
|
|
|
} from '@dcloudio/uni-app'
|
|
|
|
import {
|
|
|
|
reactive,
|
|
|
|
defineProps
|
|
|
|
} from "vue";
|
|
|
|
export default {
|
|
|
|
setup() {
|
|
|
|
let details = reactive({
|
|
|
|
activity: null,
|
|
|
|
receiver: null,
|
|
|
|
intentFilter: null,
|
|
|
|
isstart:false,
|
|
|
|
|
|
|
|
})
|
|
|
|
const props=defineProps<{ishidestop?:boolean}>()
|
|
|
|
onLoad(() => {
|
|
|
|
initScan()
|
|
|
|
startScan();
|
|
|
|
})
|
|
|
|
onShow(()=>{
|
|
|
|
startScan();
|
|
|
|
})
|
|
|
|
onHide(() => {
|
|
|
|
if(props?.ishidestop)return
|
|
|
|
stopScan();
|
|
|
|
})
|
|
|
|
onUnload(() => {
|
|
|
|
stopScan();
|
|
|
|
uni.$off('scancodedate')
|
|
|
|
})
|
|
|
|
|
|
|
|
function initScan() {
|
|
|
|
// #ifdef APP
|
|
|
|
if (plus) {
|
|
|
|
details.activity = plus.android.runtimeMainActivity(); //获取activity
|
|
|
|
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
|
|
|
|
details.intentFilter = new IntentFilter();
|
|
|
|
details.intentFilter.addAction("scan.rcv.message") // 换你的广播动作
|
|
|
|
details.receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
|
|
|
|
onReceive: function(context, intent) {
|
|
|
|
console.log("intent", intent)
|
|
|
|
plus.android.importClass(intent);
|
|
|
|
let content = utf8ByteToUnicodeStr(intent.getByteArrayExtra('barocode'))
|
|
|
|
uni.$emit('scancodedate', content.replace(/\n/g, ""))
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
// #endif
|
|
|
|
}
|
|
|
|
|
|
|
|
function utf8ByteToUnicodeStr(utf8Bytes) {
|
|
|
|
var unicodeStr = "";
|
|
|
|
for (var pos = 0; pos < utf8Bytes.length;) {
|
|
|
|
var flag = utf8Bytes[pos];
|
|
|
|
var unicode = 0;
|
|
|
|
if ((flag >>> 7) === 0) {
|
|
|
|
unicodeStr += String.fromCharCode(utf8Bytes[pos]);
|
|
|
|
pos += 1;
|
|
|
|
|
|
|
|
} else if ((flag & 0xFC) === 0xFC) {
|
|
|
|
unicode = (utf8Bytes[pos] & 0x3) << 30;
|
|
|
|
unicode |= (utf8Bytes[pos + 1] & 0x3F) << 24;
|
|
|
|
unicode |= (utf8Bytes[pos + 2] & 0x3F) << 18;
|
|
|
|
unicode |= (utf8Bytes[pos + 3] & 0x3F) << 12;
|
|
|
|
unicode |= (utf8Bytes[pos + 4] & 0x3F) << 6;
|
|
|
|
unicode |= (utf8Bytes[pos + 5] & 0x3F);
|
|
|
|
unicodeStr += String.fromCodePoint(unicode);
|
|
|
|
pos += 6;
|
|
|
|
|
|
|
|
} else if ((flag & 0xF8) === 0xF8) {
|
|
|
|
unicode = (utf8Bytes[pos] & 0x7) << 24;
|
|
|
|
unicode |= (utf8Bytes[pos + 1] & 0x3F) << 18;
|
|
|
|
unicode |= (utf8Bytes[pos + 2] & 0x3F) << 12;
|
|
|
|
unicode |= (utf8Bytes[pos + 3] & 0x3F) << 6;
|
|
|
|
unicode |= (utf8Bytes[pos + 4] & 0x3F);
|
|
|
|
unicodeStr += String.fromCodePoint(unicode);
|
|
|
|
pos += 5;
|
|
|
|
|
|
|
|
} else if ((flag & 0xF0) === 0xF0) {
|
|
|
|
unicode = (utf8Bytes[pos] & 0xF) << 18;
|
|
|
|
unicode |= (utf8Bytes[pos + 1] & 0x3F) << 12;
|
|
|
|
unicode |= (utf8Bytes[pos + 2] & 0x3F) << 6;
|
|
|
|
unicode |= (utf8Bytes[pos + 3] & 0x3F);
|
|
|
|
unicodeStr += String.fromCodePoint(unicode);
|
|
|
|
pos += 4;
|
|
|
|
|
|
|
|
} else if ((flag & 0xE0) === 0xE0) {
|
|
|
|
unicode = (utf8Bytes[pos] & 0x1F) << 12;;
|
|
|
|
unicode |= (utf8Bytes[pos + 1] & 0x3F) << 6;
|
|
|
|
unicode |= (utf8Bytes[pos + 2] & 0x3F);
|
|
|
|
unicodeStr += String.fromCharCode(unicode);
|
|
|
|
pos += 3;
|
|
|
|
|
|
|
|
} else if ((flag & 0xC0) === 0xC0) { //110
|
|
|
|
unicode = (utf8Bytes[pos] & 0x3F) << 6;
|
|
|
|
unicode |= (utf8Bytes[pos + 1] & 0x3F);
|
|
|
|
unicodeStr += String.fromCharCode(unicode);
|
|
|
|
pos += 2;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
unicodeStr += String.fromCharCode(utf8Bytes[pos]);
|
|
|
|
pos += 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return unicodeStr;
|
|
|
|
}
|
|
|
|
|
|
|
|
function startScan() {
|
|
|
|
// #ifdef APP
|
|
|
|
if(details.isstart) return
|
|
|
|
details.isstart=true
|
|
|
|
details.activity.registerReceiver(details.receiver, details.intentFilter);
|
|
|
|
// #endif
|
|
|
|
}
|
|
|
|
function stopScan() {
|
|
|
|
// #ifdef APP
|
|
|
|
details.isstart=false
|
|
|
|
details.activity.unregisterReceiver(details.receiver);
|
|
|
|
// #endif
|
|
|
|
}
|
|
|
|
return {
|
|
|
|
startScan,
|
|
|
|
stopScan,
|
|
|
|
initScan,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style>
|
|
|
|
</style>
|