曹睿
2025-04-22 2fa9c764993b4a7ad51754d0e8587990f96f1529
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
<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.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
    },
    // 开启广播
    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);
    },
  },
};
</script>