<template>
|
<view>
|
<view class="content">
|
<!-- <text>扫描结果:{{ scanResult }}</text> -->
|
</view>
|
</view>
|
</template>
|
|
<script>
|
var main, receiver, filter;
|
var action, extraKey;
|
var _codeQueryTag = false;
|
|
export default {
|
data() {
|
return {
|
scanCode: '',
|
scanResult: ''
|
}
|
},
|
created() {
|
uni.getSystemInfo({
|
success: (res) => {
|
var brand = res.brand.toUpperCase();
|
var model = res.model.toUpperCase();
|
|
console.log('设备品牌:', brand);
|
console.log('设备型号:', model);
|
|
// Zebra设备配置
|
if (brand.indexOf("ZEBRA") != -1 && model.indexOf("TC2") != -1) {
|
action = "com.zebra.scan";
|
extraKey = "com.motorolasolutions.emdk.datawedge.data_string";
|
}
|
// AUTOID9N设备配置
|
else if (brand.indexOf("SEUIC") != -1 || brand.indexOf("AUTOID") != -1) {
|
// AUTOID9N专用配置
|
if (model.indexOf("AUTOID9N") != -1) {
|
action = "com.android.server.scannerservice.broadcast";
|
extraKey = "scannerdata"; // 或 "BARCODE_STRING",根据实际情况调整
|
}
|
// 其他SEUIC设备
|
else {
|
action = "com.android.server.scannerservice.broadcast";
|
extraKey = "scannerdata";
|
}
|
}
|
else {
|
console.log('未知设备品牌,无法初始化扫码');
|
return;
|
}
|
|
console.log('扫码广播配置:', { action, extraKey });
|
this.initScan();
|
this.startScan();
|
},
|
fail: (err) => {
|
console.error('获取系统信息失败:', err);
|
}
|
});
|
},
|
onLoad() {
|
// 监听全局扫码事件
|
uni.$on('scan', (event) => {
|
this.scanResult = event.code;
|
console.log('扫码结果:', this.scanResult);
|
});
|
},
|
onUnload() {
|
this.stopScan();
|
uni.$off('scan'); // 移除事件监听
|
},
|
methods: {
|
initScan() {
|
console.log('初始化扫码接收器');
|
|
try {
|
main = plus.android.runtimeMainActivity(); // 获取activity
|
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
|
filter = new IntentFilter();
|
filter.addAction(action);
|
|
console.log('注册广播过滤器:', action);
|
|
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
|
onReceive: function (context, intent) {
|
console.log('接收到扫码广播');
|
|
try {
|
plus.android.importClass(intent);
|
let code = intent.getStringExtra(extraKey);
|
|
if (code) {
|
console.log('扫码内容:', code);
|
this.queryCode(code);
|
} else {
|
console.warn('扫码内容为空,可能ExtraKey不正确:', extraKey);
|
|
// 尝试备选ExtraKey
|
const altExtraKey = extraKey === "BARCODE_STRING" ? "scannerdata" : "BARCODE_STRING";
|
code = intent.getStringExtra(altExtraKey);
|
|
if (code) {
|
console.log('使用备选ExtraKey获取到内容:', altExtraKey);
|
this.queryCode(code);
|
}
|
}
|
} catch (e) {
|
console.error('处理扫码广播时出错:', e);
|
}
|
}.bind(this) // 确保this指向组件实例
|
});
|
|
console.log('扫码接收器初始化成功');
|
} catch (e) {
|
console.error('初始化扫码接收器失败:', e);
|
}
|
},
|
startScan() {
|
console.log('开始监听扫码广播');
|
|
try {
|
if (main && receiver && filter) {
|
main.registerReceiver(receiver, filter);
|
console.log('广播接收器已注册');
|
} else {
|
console.error('无法注册广播接收器: 组件未初始化');
|
}
|
} catch (e) {
|
console.error('注册广播接收器失败:', e);
|
}
|
},
|
stopScan() {
|
console.log('停止监听扫码广播');
|
|
try {
|
if (main && receiver) {
|
main.unregisterReceiver(receiver);
|
console.log('广播接收器已注销');
|
}
|
} catch (e) {
|
console.error('注销广播接收器失败:', e);
|
}
|
},
|
queryCode(code) {
|
console.log('处理扫码结果:', code);
|
|
if (_codeQueryTag) {
|
console.log('忽略重复扫码');
|
return false;
|
}
|
|
_codeQueryTag = true;
|
|
// 防抖处理
|
setTimeout(() => {
|
_codeQueryTag = false;
|
}, 150);
|
|
// 触发全局事件
|
uni.$emit('scan', { code });
|
}
|
}
|
}
|
</script>
|
|
<style></style>
|