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

在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

要回复文章请先登录注册

w***@163.com

w***@163.com

回复 瑞丰计算机 :
我的和你的一样 也是优博讯的
2019-11-05 14:37
瑞丰计算机

瑞丰计算机 (作者)

回复 w***@163.com :
如果你的PDA监听的服务名称和我的不一样,欢迎把PDA型号和监听服务的名称也分享出来,这样就能给更多后来者提供帮助。
2019-10-30 22:48
w***@163.com

w***@163.com

感谢大佬为后来者提供了很大的帮助
2019-10-18 17:39