南骏 池
3 天以前 eca721962b1287410f0265e2dda82b469d29f144
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
// pda的特色设置中需要关闭-禁止将扫描按键的键值传递给应用的开关
let mainActivity; // 运行时的主要活动activity
let intentFilter; // 实例化的意图过滤器
let broadcastReceiver; // 广播接收器
let repeatFlag = false;
 
// 初始化定义广播
const init = (onReceiveCallback) => {
    /* #ifdef APP-PLUS */
    // 获取activity
    mainActivity = plus.android.runtimeMainActivity();
    // 导入类
    const IntentFilter = plus.android.importClass('android.content.IntentFilter');
    //实例化一个意图过滤器
    intentFilter = new IntentFilter();
    // addAction添加动作, com.android.server.scannerservice.broadcast为设备配置的广播名称
    intentFilter.addAction("com.android.server.scannerservice.broadcast");
    // BroadcastReceiver广播接收器接口:implements 实现接口  onReceive实现接口的方法
    broadcastReceiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
        onReceive: function(context, intent) {
            plus.android.importClass(intent);
            // 扫描设置的开发者选项--手持机pda的广播键值scannerdata
            const code = intent.getStringExtra("scannerdata");
            console.log('pda原始扫描数据:', code);
            //防重复
            if (repeatFlag) return;
            repeatFlag = true;
            setTimeout(function() {
                repeatFlag = false;
            }, 150);
            // 到这里扫描成功,获取结果,可以调用自己的业务逻辑
            onReceiveCallback && onReceiveCallback(code);
        }
    });
    /* #endif */
}
 
// 开始广播监听扫码
const start = () => {
    /* #ifdef APP-PLUS */
    mainActivity.registerReceiver(broadcastReceiver, intentFilter);
    /* #endif */
}
 
// 停止广播监听扫码
const stop = () => {
    /* #ifdef APP-PLUS */
    mainActivity.unregisterReceiver(broadcastReceiver);
    /* #endif */
}
 
// 主动触发扫描
const triggerScan = () => {
    // 获取Android意图类
    let Intent = plus.android.importClass("android.content.Intent");
    // 实例化意图  
    let intent = new Intent();
    // 定义意图,由厂商提供(此处设置为东大的:开始扫描广播com.scan.onStartScan,对应的停止扫描广播为com.scan.onEndScan)
    intent.setAction("com.scan.onStartScan");
    // 广播这个意图
    mainActivity.sendBroadcast(intent);
}
 
export const broadcastScan = {
    init,
    start,
    stop,
    triggerScan,
};
 
// 引入使用
//     import { broadcastScan } from './scanCode.js';