曹睿
2025-04-23 76bee36dc9da0e09276f93d03c424e07e9608ea3
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
export function useZebraScan() {
  // pda的特色设置中需要关闭-禁止将扫描按键的键值传递给应用的开关
  const mainActivity = ref(); // 运行时的主要活动activity
  const intentFilter = ref(); // 实例化的意图过滤器
  const broadcastReceiver = ref(); // 广播接收器
  const repeatFlag = ref<boolean>(false);
 
  const init = (onReceiveCallback: any) => {
    console.log("初始化zebra扫描");
    /* #ifdef APP-PLUS */
    // 获取activity
    mainActivity.value = plus.android.runtimeMainActivity();
    // 导入类
    const IntentFilter = plus.android.importClass("android.content.IntentFilter");
    //实例化一个意图过滤器
    intentFilter.value = new IntentFilter();
    // addAction添加动作, com.android.server.scannerservice.broadcast为设备配置的广播名称
    intentFilter.value.addAction("com.dwexample.ACTION");
    // BroadcastReceiver广播接收器接口:implements 实现接口  onReceive实现接口的方法
    broadcastReceiver.value = plus.android.implements(
      "io.dcloud.feature.internal.reflect.BroadcastReceiver",
      {
        onReceive: (context: any, intent: any) => {
          plus.android.importClass(intent);
          // 扫描设置的开发者选项--手持机pda的广播键值scannerdata
          const code = intent.getStringExtra("com.motorolasolutions.emdk.datawedge.data_string");
          console.log("pda原始扫描数据:", code);
          //防重复
          if (repeatFlag.value) return;
          repeatFlag.value = true;
          setTimeout(() => {
            repeatFlag.value = false;
          }, 150);
          // 到这里扫描成功,获取结果,可以调用自己的业务逻辑
          onReceiveCallback(code);
        },
      }
    );
    console.log("注册广播成功");
    /* #endif */
  };
  const start = () => {
    console.log("开始扫描");
    mainActivity.value.registerReceiver(broadcastReceiver, intentFilter);
  };
  const stop = () => {
    console.log("停止扫描");
    mainActivity.value.unregisterReceiver(broadcastReceiver);
  };
  //是否开启激光红外线扫描,true开启,false关闭
  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");
    // 广播这个意图
    mainActivity.value.sendBroadcast(intent);
  };
  return { init, start, stop, triggerScan };
}