货无忧安装平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

141 lines
3.7 KiB

<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>