曹睿
2 天以前 aca7aa9ce32acc4c8795342f945b027d3bc9f62a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<template>
  <view>
    <view class="content"></view>
  </view>
</template>
<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",
  },
});
 
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);
    },
  });
};
 
// 开启广播
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>