| | |
| | | <view class="content"></view> |
| | | </view> |
| | | </template> |
| | | <!-- 激光扫码,广播模式 --> |
| | | <script> |
| | | var main, receiver, filter; |
| | | var codeQueryTag = false; |
| | | export default { |
| | | data() { |
| | | return { |
| | | scanCode: "", |
| | | }; |
| | | <script lang="ts" setup> |
| | | const main = ref(); |
| | | const receiver = ref(); |
| | | const filter = ref(); |
| | | const codeQueryTag = ref(false); |
| | | const props = defineProps({ |
| | | emitName: { |
| | | type: String, |
| | | default: "scan", |
| | | }, |
| | | 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.dwexample.ACTION"); |
| | | 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 |
| | | //斑马 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 |
| | | }); |
| | | |
| | | const initScan = () => { |
| | | main.value = plus.android.runtimeMainActivity(); //获取activity |
| | | let IntentFilter: any = plus.android.importClass("android.content.IntentFilter"); |
| | | filter.value = new IntentFilter(); |
| | | //下面的addAction 改为自己 pad 设备的广播动作(在扫描设置或者厂商附带的app 里面设置为广播模式,然后查看相应参数) |
| | | filter.value.addAction("com.dwexample.ACTION"); |
| | | receiver.value = plus.android.implements("io.dcloud.feature.internal.reflect.BroadcastReceiver", { |
| | | onReceive: (context: any, intent: any) => { |
| | | console.log("---onReceive:", context, intent); |
| | | plus.android.importClass(intent); |
| | | //下面的getStringExtra内改为自己的广播标签(键值/key): data |
| | | //斑马 TC20 |
| | | var banMaSacanInfo = intent.getStringExtra( |
| | | "com.motorolasolutions.emdk.datawedge.data_string" |
| | | ); |
| | | // callback(intent.getStringExtra('com.motorolasolutions.emdk.datawedge.data_string')); |
| | | console.log("斑马扫描结果", banMaSacanInfo); |
| | | // 传入接收到的参数 |
| | | queryCode(banMaSacanInfo); |
| | | }, |
| | | // 开启广播 |
| | | 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("scan", { |
| | | code: data, |
| | | }); |
| | | // #endif |
| | | }, |
| | | triggerScan() { |
| | | console.log("触发扫描"); |
| | | // 获取Android意图类 |
| | | let Intent = plus.android.importClass("android.content.Intent"); |
| | | // 实例化意图 |
| | | let intent = new Intent(); |
| | | // 定义意图,由厂商提供(此处设置为东大的: 开始扫描广播com.scan.onStartScan,对应的停止扫描广播为com.scan.onEndScan) |
| | | intent.setAction("com.symbol.datawedge.api.ACTION"); |
| | | intent.putExtra("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER", "START_SCANNING"); |
| | | // 广播这个意图 |
| | | main.sendBroadcast(intent); |
| | | }, |
| | | }, |
| | | }); |
| | | }; |
| | | |
| | | // 开启广播 |
| | | const startScan = () => { |
| | | // #ifdef APP |
| | | console.log("startScan,开启广播接收"); |
| | | main.value.registerReceiver(receiver.value, filter.value); |
| | | // #endif |
| | | }; |
| | | // 关闭广播 |
| | | const stopScan = () => { |
| | | // #ifdef APP |
| | | console.log("stopScan结束"); |
| | | main.value.unregisterReceiver(receiver.value); |
| | | // #endif |
| | | }; |
| | | |
| | | const queryCode = (code: any) => { |
| | | // #ifdef APP |
| | | if (codeQueryTag.value) return false; |
| | | codeQueryTag.value = true; |
| | | setTimeout(function () { |
| | | codeQueryTag.value = false; |
| | | }, 150); |
| | | // console.log('-****--扫码code: ', code); |
| | | let data = code; |
| | | uni.$emit(props.emitName, { |
| | | code: data, |
| | | }); |
| | | // #endif |
| | | }; |
| | | |
| | | const triggerScan = () => { |
| | | console.log("触发扫描"); |
| | | // 获取Android意图类 |
| | | let Intent = plus.android.importClass("android.content.Intent"); |
| | | // 实例化意图 |
| | | let intent = new Intent(); |
| | | // 定义意图,由厂商提供(此处设置为东大的: 开始扫描广播com.scan.onStartScan,对应的停止扫描广播为com.scan.onEndScan) |
| | | intent.setAction("com.symbol.datawedge.api.ACTION"); |
| | | intent.putExtra("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER", "START_SCANNING"); |
| | | // 广播这个意图 |
| | | main.value.sendBroadcast(intent); |
| | | }; |
| | | |
| | | onLoad(() => { |
| | | console.log("初始化"); |
| | | // 初始化 |
| | | initScan(); |
| | | // 启动广播 |
| | | startScan(); |
| | | }); |
| | | |
| | | onHide(() => { |
| | | stopScan(); |
| | | }); |
| | | |
| | | onUnmounted(() => { |
| | | stopScan(); |
| | | }); |
| | | |
| | | defineExpose({ |
| | | triggerScan, |
| | | }); |
| | | </script> |