Sinea
Sinea
  • 发布:2018-09-21 13:56
  • 更新:4 天前
  • 阅读:10753

PDA终端扫描实现

分类:HTML5+

以下方法都是非原生方式实现

Javascript获取扫码结果实现

document.onkeydown=function(e){  
    //webview不需要兼容ie  
    console.log(e.keyCode)  
}

该方法需要判断按键和间隔输入情况,用户可能在扫码的时候有其他按键等误操作,所以不建议用来进行获取扫码结果。

Native.js监听广播消息实现

参考论坛 回答

function plusReady() {   
    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.zkc.scancode");//监听扫描  
    main.registerReceiver(receiver,filter);//注册监听  

    function doReceive(context, intent) {   
        plus.android.importClass(intent);//通过intent实例引入intent类,方便以后的‘.’操作  
        var Number = intent.getStringExtra("code");   
        console.log(Number);  
        main.unregisterReceiver(receiver);//取消监听  
    }  
}

销邦X8扫描枪

我这里使用的是销邦科技X8扫描设备,由于设备不一样导致文章中的代码不能直接使用,需要配置监听的数据才能连接。搜索销邦官网获取对应开发包下载

开发包截图

注意设置内勾选开启扫描,选择输入模式API:

PDA设置

打开开发说明查看参数:

pdf截图

代码对应修改如下:

···  

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

···  

intent.getStringExtra("scannerdata");//返回结果  

···

原代码实现的是扫码完成就取消监听这样不符合实际业务(多次扫描),但是不取消监听用同时有打开新的页面,这时会发现之前的页面还在监听扫描,当然在打开新页面的时候进行取消监听,但是当用户从新页面返回之前的页面时又需要重启监听,各种条件判断写出了比较麻烦。

这里采用的是接受扫描结果时判断是否是当前显示页面。首先在打开页面时把页面id存储到本地,并且重写back:

function pageInit(){  
    var _self = plus.webview.currentWebview()  
    localStorage.setItem('WEBVIEW_ID', _self.id)  
    mui.back = function() {  
        localStorage.setItem('WEBVIEW_ID', _self.opener().id)  
        _self.close()  
    }  
}

然后判断页面id:

function scan(callback){  
    var main = plus.android.runtimeMainActivity(); //获取activity  
    var receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
        onReceive: function(context, intent){//实现onReceiver回调函数  
            if(plus.webview.currentWebview().id != localStorage.getItem(util.config.WEBVIEW_ID)) return  
            callback(intent.getStringExtra('scannerdata'))  
        }   
    });  
    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'); //监听扫码广播  
    main.registerReceiver(receiver, filter); //注册监听  
}

页面使用:

mui.plusReady(function () {  
    pageInit()  
    setTimeout(function(){  
        scan(function(code){  
            console.log('扫描结果:'+code)  
        })  
    },300)  
})

注意:在HBuilder控制台没有调试信息,需要在webview调试窗口中才能看到打印信息。另建议在plusReady中延迟执行scan()。

霍尼韦尔扫描枪

首先需要在设备上去设置监听的对象名(我这里设置成和销邦设备一样的com.android.server.scannerservice.broadcast),接受参数的时候再判断一下设备plus.device.model进行切换接受返回结果的对象名:

scan: function(callback){  
    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: function(context, intent){//实现onReceiver回调函数  
        if(plus.webview.currentWebview().id != localStorage.getItem(util.config.WEBVIEW_ID)) return  
            var _key = plus.device.model == 'EDA50K' ? 'data' : 'scannerdata';  
            callback(intent.getStringExtra(_key))  
        }  
    });  
    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'); //监听扫码广播  
    main.registerReceiver(receiver, filter); //注册监听  
}
9 关注 分享
970615704@qq.com c13632762094@outlook.com skysowe lifeng_dev 767670652@qq.com boboidream farce 948720366@qq.com 810802300@qq.com

要回复文章请先登录注册

Sinea

Sinea (作者)

回复 梦123 :
没试过 你可以在去它官网找找广播地址
4 天前
梦123

梦123

斑马tc26的设备用这个方法可以实现吗
6 天前
Sinea

Sinea (作者)

回复 11831040@qq.com :
https://blog.csdn.net/s_156/article/details/109724484 试试这个
2021-03-29 09:56
Sinea

Sinea (作者)

回复 11831040@qq.com :
https://www.zebra.cn/cn/zh/support-downloads/mobile-computers/handheld/mc3300.html 这个去官网看看吧 或者咨询下客服要求技术支持
2021-03-29 09:51
11831040@qq.com

11831040@qq.com

斑马mc33k 找不到 广播动作地址,求解
2021-03-26 09:52
Sinea

Sinea (作者)

回复 304225775@qq.com :
文中只有三张图
http://img.sinea.cn/%E9%94%80%E9%82%A6x8-pdf%E5%BC%80%E5%8F%91%E8%AF%B4%E6%98%8E.png
http://img.sinea.cn/%E9%94%80%E9%82%A6x8-%E8%AE%BE%E5%A4%87%E8%AE%BE%E7%BD%AE%E7%95%8C%E9%9D%A2.png
http://img.sinea.cn/%E9%94%80%E9%82%A6x8-%E5%BC%80%E5%8F%91%E5%8C%85%E6%96%87%E4%BB%B6%E5%A4%B9%E6%88%AA%E5%9B%BE.png
2020-10-22 17:02
304225775@qq.com

304225775@qq.com

回复 Sinea :
刷新好多次了,确定看不到图
2020-10-22 15:44
Sinea

Sinea (作者)

回复 天高地厚 :
可以看到啊 多刷新一下
2020-10-13 09:14
天高地厚

天高地厚

作者您好,您发的图片看不见了,能重新发一遍吗,或者单独发给我也行,谢谢了
2020-10-12 18:07
Sinea

Sinea (作者)

回复 2676069598@qq.com :
不清楚哦 之前只适配了文章中的两款
2020-08-29 17:25