瑞丰计算机
瑞丰计算机
  • 发布:2019-10-11 11:12
  • 更新:2024-04-17 18:11
  • 阅读:13439

在uni-app中对优博讯和新大陆安卓(Android)PDA的条码扫码广播监听(带示例附件)

分类:uni-app

我们在开发的时候需要获取优博讯PDA的条码扫码内容,根据前人的分享及自己找的一些资料整理示例代码如下,希望能帮助到有需要的人。为了避免刚入门的人无从下手,特增加了附件。

以下是示例,真正在用的时候,建议在app启动之后就开始监听,并通过全局事件来推送给需要的页面,而不是在每个页面都自己去监听,有利于代码的维护和提升性能。全局事件的监听和释放可参考我的另一个帖子:关于uni-app全局事件监听和释放监听的分享

另外优博讯的PDA需要在系统的:设置->扫描->Default->关闭(键盘方式输出) 才能使用广播监听。

onLoad() {  

            page = this;  

            this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    
            var context = plus.android.importClass('android.content.Context'); //上下文    
            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
                onReceive: doReceive  
            });  
            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  
            var Intent = plus.android.importClass('android.content.Intent');  
            var filter = new IntentFilter();  

            //针对优博讯安卓PDA-i6300A添加监听,其它优博讯的型号应该一样或类似  
            filter.addAction("android.intent.ACTION_DECODE_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    
                plus.android.importClass(intent);  

                //条码内容  
                var barcodeBytes = intent.getByteArrayExtra("barcode");  
                var barcode = byteToString(barcodeBytes);  

                //条码长度  
                var barcodeLength = intent.getIntExtra("length", 0);  
                //var myArray = new ArrayBuffer(0);  
                //条码类型  
                var barcodeTypeBytes = intent.getByteExtra("barcodeType", (0 | 0));  
                var barcodeType = byteToString(barcodeTypeBytes);  

                // uni.showModal({  
                //  content: '条码:' + barcode + '\r\n长度:' + barcodeLength + '\r\n类型:' + barcodeType,  
                //  showCancel: false  
                // });  
                page.title = barcode;  
                //console.log(barcode);    
                //main.unregisterReceiver(receiver);//取消监听    
            }  

            function byteToString(arr) {  
                if (typeof arr === 'string') {  
                    return arr;  
                }  
                var str = '',  
                    _arr = arr;  
                for (var i = 0; i < _arr.length; i++) {  
                    var one = _arr[i].toString(2),  
                        v = one.match(/^1+?(?=0)/);  
                    if (v && one.length == 8) {  
                        var bytesLength = v[0].length;  
                        var store = _arr[i].toString(2).slice(7 - bytesLength);  
                        for (var st = 1; st < bytesLength; st++) {  
                            store += _arr[st + i].toString(2).slice(2);  
                        }  
                        str += String.fromCharCode(parseInt(store, 2));  
                        i += bytesLength - 1;  
                    } else {  
                        str += String.fromCharCode(_arr[i]);  
                    }  
                }  
                return str;  
            }  

        }

下面是新大陆PDA的扫码方式

    //新大陆 智联天地 N7000R 获取方法  

    //#ifdef APP-PLUS  

            //this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    

            var context = plus.android.importClass('android.content.Context'); //上下文    

            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  

                onReceive: doReceive  

            });  

            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  

            var Intent = plus.android.importClass('android.content.Intent');  

            var filter = new IntentFilter();  

            filter.addAction("com.android.server.scannerservice.broadcast"); //监听扫描  

            // filter.addAction("android.intent.extra.SCAN_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    

                plus.android.importClass(intent);  

                var barcodeBytes1 = intent.getStringExtra("scannerdata");  

                console.log(page.openCustmerScan);  

                if (page.openCustmerScan) {  

                    page.cylinderRecovery.customerId = barcodeBytes1  

                } else {  

                    page.setval(barcodeBytes1)  

                }  

            }  
    //#ifdef APP-PLUS  

            //this.title = "开始监听!";  

            var main = plus.android.runtimeMainActivity(); //获取activity    

            var context = plus.android.importClass('android.content.Context'); //上下文    

            var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  

                onReceive: doReceive  

            });  

            var IntentFilter = plus.android.importClass('android.content.IntentFilter');  

            var Intent = plus.android.importClass('android.content.Intent');  

            var filter = new IntentFilter();  

            filter.addAction("com.android.server.scannerservice.broadcast"); //监听扫描  

            // filter.addAction("android.intent.extra.SCAN_DATA"); //监听扫描  

            main.registerReceiver(receiver, filter); //注册监听    

            function doReceive(context, intent) {  

                //通过intent实例引入intent类,方便以后的‘.’操作    

                plus.android.importClass(intent);  

                var barcodeBytes1 = intent.getStringExtra("scannerdata");  

                console.log(page.openCustmerScan);  

                if (page.openCustmerScan) {  

                    page.cylinderRecovery.customerId = barcodeBytes1  

                } else {  

                    page.setval(barcodeBytes1)  

                }  

            }  

            //#endif  
            //#endif
12 关注 分享
w***@163.com 1***@qq.com 7***@qq.com farce chualosue 小时光 Tomyni 国服第一后羿 2***@qq.com 2***@qq.com 2***@qq.com j***@gmail.com

要回复文章请先登录注册

3***@qq.com

3***@qq.com

public static final String SCANNER_SERVICE = "IScannerService";
public static final String SCANNER_ACTION = "android.intent.action.SCANNER_SERVICE";
public static final String GET_SCANDATA = "android.intent.action.RECEIVE_SCANDATA";
public static final String SCAN_DATA = "android.intent.extra.SCAN_DATA";
public static final int RETURN_SUCCESS = 257;
public static final int RETURN_ENGINE_BUSY = 258;
public static final int RETURN_ENGINE_TYPE_ERR = 259;
public static final int RETURN_SERIAL_PORT_ERR = 260;
public static final int RETURN_TRIGGER_DEVICE_ERR = 261;
public static final int RETURN_NOT_IMPL = 262;
public static final int LOW_LEVEL = 0;
public static final int HIGH_LEVEL = 1;
public static final int SCAN_ENGINE_UNKNOWN = 1000;
public static final int SCAN_ENGINE_MOTO = 1001;
public static final int SCAN_ENGINE_HONEYWELL = 1002;
public static final int SCAN_ENGINE_MINDEO = 1003;
public static final int SCAN_ENGINE_NEWLAND = 1004;
public static final int SCAN_SINGLE_MODE = 1;
public static final int SCAN_CONTINUOUS_MODE = 2;
public static final int SCAN_KEY_HOLD_MODE = 3;
public static final int TRANSFER_BY_EDITTEXT = 1;
public static final int TRANSFER_BY_KEY = 2;
public static final String DECODER_TIMEOUT = "Decode is interruptted or timeout ...";
public static final int TRANSFER_BY_API = 3;
public static final String REQUEST = "request";
public static final String RESULT = "result";


这里面可以看出SCANNER_ACTION 是广播动作 但是标签是什么呢
2020-07-17 11:18
3***@qq.com

3***@qq.com

THIMFONE N5s 用这个方法没用 不知道是不是因为广播动作和广播标签
2020-07-17 11:18
你咋骚的一匹

你咋骚的一匹

回复 z***@163.com :
没有,那个项目给别人做了,我再没管过
2020-06-03 16:06
海盗水手

海盗水手

亲测 很好用 非常感谢!!!
2020-05-22 13:43
chualosue

chualosue

回复 海盗水手 :
找厂家要开发文件然后里面一般就有型号,除此之外有些采集器自己可以设置广播字段和数据字段
2020-05-18 15:45
海盗水手

海盗水手

优博讯哪个型号可以用呢?
2020-05-18 15:08
8***@qq.com

8***@qq.com

回复 z***@163.com :
我也在做东大集成,只需要把这个 filter.addAction("android.intent.ACTION_DECODE_DATA"); 里面的换成东大集成的scan就行了
2020-04-13 11:05
z***@163.com

z***@163.com

回复 你咋骚的一匹 :
我也是东大集成的- -,我也没搞定,广播扫码的时候监听不到,获取不到扫码结果赋值给input,你解决了吗
2020-04-09 13:57
chualosue

chualosue

大佬,用的是新大陆的采集器,但是页面执行各种方法、数据渲染都特别卡导致功能完成不了,在别的不卡的手机上没问题的,有没有什么优化方法
2020-04-07 10:33
你咋骚的一匹

你咋骚的一匹

大佬,我用的是东大集成的PDA,一直没明白这个扫码怎么和我APP联动,我看不懂你的代码,能请教一下吗
2019-12-13 10:03