1.来源灵感的两位作者:
第一位:MUI集成新大陆、斑马PDA_com.motorolasolutions.emdk.datawedge.data_string-CSDN博客
第二位:关于uinapp 调用PDA设备激光扫码 - 广播模式_uniapp pad扫码-CSDN博客
关于uinapp 调用PDA设备激光扫码 - 广播模式_uniapp pad扫码-CSDN博客
2.重要组件以下代码:
<template>
<view>
<view class="content"></view>
</view>
</template>
<!-- 激光扫码,广播模式 -->
<script>
var main, receiver, filter;
var codeQueryTag = false;
export default {
data() {
return {
scanCode: ''
}
},
created() {
// 初始化
this.initScan()
// 启动广播
this.startScan();
},
onHide() {
// 结束广播
this.stopScan();
},
destroyed() {
// 结束广播
this.stopScan();
},
methods: {
// 初始化
initScan() {
// #ifdef APP
// console.log('initScan:扫码初始化');
let that = this;
main = plus.android.runtimeMainActivity(); //获取activity
//var context = plus.android.importClass('android.content.Context'); //上下文
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
filter = new IntentFilter();
//下面的addAction 改为自己 pad 设备的广播动作(在扫描设置或者厂商附带的app 里面设置为广播模式,然后查看相应参数)
filter.addAction("com.service.scanner.data");
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: (context, intent) => {
console.log('---onReceive:', context, intent);
plus.android.importClass(intent);
//下面的getStringExtra内改为自己的广播标签(键值/key): data
console.log('---***getStringExtra: ', intent.getStringExtra("ScanCode"));
// 海康
// let code = intent.getStringExtra("ScanCode");
// console.log('---扫码data: ', code);
//斑马 TC20
var banMaSacanInfo = intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string'); // callback(intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string'));
console.log('斑马扫描结果', banMaSacanInfo)
// 传入接收到的参数
that.queryCode(banMaSacanInfo);
}
});
// #endif
},
// 开启广播
startScan() {
// #ifdef APP
console.log('startScan,开启广播接收');
main.registerReceiver(receiver, filter);
// #endif
},
// 关闭广播
stopScan() {
// #ifdef APP
console.log('stopScan,结束');
main.unregisterReceiver(receiver);
// #endif
},
// 避免重复扫码
queryCode: function(code) {
// #ifdef APP
if (codeQueryTag) return false;
codeQueryTag = true;
setTimeout(function() {
codeQueryTag = false;
}, 150);
// console.log('-****--扫码code: ', code);
let data = code
uni.$emit('xwscan', {
code: data
})
// #endif
}
}
}
</script>
3.其中最重要的两个:
1.let code = intent.getStringExtra("ScanCode");//(海康PDA已实现)
2.var banMaSacanInfo = intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string'); // (斑马PDA已实现)
4.使用组件的方法(页面开始监听后退出页面必须要销毁,不然会出现多个监听,扫描慢)
<template>
<view class="content">
<view class="uni-form-item uni-column">
<view class="title">实时获取请扫描输入值:{{value}}</view>
<u-input class="input" v-model="value" placeholder="请扫描" clearable
/>
</view>
<xw-scan></xw-scan>
</view>
</template>
<script>
// 广播模式激光扫码
import xwScan from '@/components/padDevice/scan-code.vue'
export default {
components: {
xwScan
},
data() {
return {
value: '',
focus: false,
scanTitle: "扫描结果",
}
},
onLoad() {
// console.log('页面开启(onLoad)广播监听事件:xwscan')
// 开启广播监听事件
uni.$on('xwscan',this.BroadcastScanningToObtainData)
},
onUnload(){
// console.log('页面销毁(onUnload)广播监听事件:xwscan')
// 销毁广播监听事件
uni.$off('xwscan', this.BroadcastScanningToObtainData)
},
methods:{
BroadcastScanningToObtainData(res){
console.log('获取次数', res.code)
let _this = this
let barcode = res.code
console.log('打印数据', barcode )
},
}
}
</script>