因为要做扫描枪的事件监控。
本来监听document的keydown事件蛮好。
但在uniapp里不知道怎么写。。求高手指点
 
                                        
                                    
                                    - 发布:2018-12-16 23:24
- 更新:2021-10-16 16:18
- 阅读:28756
 
                                                                    
                                                                来来去去 (作者)
不好意思,一直没来看。我的问题解决了。
我用的是pda,有两种情况:
第一种,官方已经给出办法了,具体 就不说了,直接查该文档很容易
uni.scanCode({  
    success: function (res) {  
        showTip(res.result)  
    },  
    fail: function (res) {}  
})第二种:我也在这里搜索重整理的。
var main,receiver,filter;  
var _codeQueryTag = false;  
onLoad: function (option) {  
    this.initScan()  
},  
onShow: function(){  
    this.startScan();  
},  
onHide:function(){  
    this.stopScan();  
},  
onUnload:function(){  
    /*页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果*/  
    this.stopScan();  
},  
initScan() {  
    let _this = this;  
    /* #ifdef APP-PLUS */  
    main = plus.android.runtimeMainActivity();//获取activity  
    /* var context = plus.android.importClass('android.content.Context'); */  
    var IntentFilter = plus.android.importClass('android.content.IntentFilter');  
    /* var Intent = plus.android.importClass('android.content.Intent'); */  
    filter = new IntentFilter();  
    filter.addAction("com.se4500.onDecodeComplete");  
    receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver',{  
    onReceive : function(context, intent) {  
        plus.android.importClass(intent);  
 /*这个se4500很坑,不同的手机或pda,这个值就不一样,要具体去查硬件api*/  
        let code = intent.getStringExtra("se4500");  
        /* rmker.showTip('条码:'+code); */  
        /*调用本页面某方法*/  
        _this.queryCode(code);  
    }});  
    /* #endif */  
},  
startScan(){  
    /* #ifdef APP-PLUS */  
    main.registerReceiver(receiver,filter);  
    /* #endif */  
},  
stopScan(){  
    /* #ifdef APP-PLUS */  
    main.unregisterReceiver(receiver);  
    /* #endif */  
},  
queryCode: function(code){  
//防重复  
    if(_codeQueryTag)return false;  
    _codeQueryTag = true;  
    setTimeout(function(){  
        _codeQueryTag = false;  
    },150);  
        //到这里扫描成功了,可以调用自己的业务逻辑,code就是扫描的结果  
},  
 
                                                                    
                                                                uniapper - abc
试试下面的代码:
<template>  
<view>  
  <input type="text"    @input="onInput"  value="" />  
</view>  
</template>  
<script>  
export default {  
  methods: {  
      onInput (e) {  
        console.log(e.detail.value)               
      }  
    }  
}  
</script> 
                                                                    
                                                                来来去去 (作者)
我是从这一篇文章中模仿着做的
https://ask.dcloud.net.cn/article/35044  
至于:
filter.addAction("com.se4500.onDecodeComplete");
let code = intent.getStringExtra("se4500");
这两句,我用的是pda,从pad厂家要了android开发api。
com.se4500.onDecodeComplete 这一个是api里用过的一个类
而getStringExtra("se4500") 中的se4500 是我猜出来的,现在也不知道是什么规律,很多时候应该是code或barcode
 
                                                                    
                                                                感谢作者,已经解决了问题。
我这边是pda里面有个设置,可以设置在硬件扫码后进行的操作,可以有选择:  
- 接受扫码输入 ------聚焦到一个输入框,再扫,得到的内容会进入到输入框里面去
- 通过广播模式下,进行分发,也就是走作者的第二条线
 在这里需要修改这两句代码,把引号的内容换成厂家提供的
 filter.addAction("com.se4500.onDecodeComplete"); ------ 注册的广播
 let code = intent.getStringExtra("se4500"); -----广播的内容
 是在iData提供的Android源码里面找到的这个内容
 
                                                                    
                                                                我目前遇到的问题:
利用监听广播获取到pda终端的scan扫描按钮的扫描结果,也能正常返回
唯一的问题就是,有时候会出现,按下pda自带的scan按钮,没反应,必须要点开(或者说重启)pda自带的一个安卓demo(估计是原生做的,里面有扫描后是振动还是声音的设置,有广播的相关设置,就是你的广播监听的代码要和里面的数据写的一样)
 
                                                                    
                                                                但是这个针对同一种机型,我想问下兼容不同的pda的话应该用哪种方法啊
 
             
             
             
			 
                                                                     
                                                                     
                                                                    
 
                                                                    

 
                                                                     
                                                                    

 
                                                                     
                                                                     
                                                                    

 
                                                                     
                                                                     
                                                                    
 
            
4***@qq.com
亲测好用,试了一天,原来是我的pda里有个设置,在广播模式下接受扫码!非常感谢
2019-06-28 17:25
桃子先生
楼主,这个是怎么对应的啊,请赐教
filter.addAction("com.se4500.onDecodeComplete");
2019-07-21 04:35
3***@qq.com
不行啊,没用,我还是没办法调到按键啊
2019-10-19 17:38
3***@qq.com
回复 4***@qq.com: filter.addAction("com.se4500.onDecodeComplete"); 一定要这个??
2019-10-19 18:10
3***@qq.com
回复 4***@qq.com: 这个怎么写
2019-10-19 18:10
看不清的世界
我只能监听一次,后面再扫描就没用了,这是扫描情况呢?
2020-03-20 09:33
4***@qq.com
回复 3***@qq.com: 这个是在你的PDA的设置里找到的
2020-05-12 16:41
3***@qq.com
回复 4***@qq.com: 晕死,我找到了,前几天刚弄好这个,就是PDA给的那个SCAN包里有,,哎,,,
2020-06-30 16:17
3***@qq.com
记住 filter.addAction("com.se4500.onDecodeComplete"); 这里是要厂家给的PDA里的scan文件里,有一个JAVA文件,仔细找。然后let code = intent.getStringExtra("se4500"); 这个值有些是要转换的,并不是全部是这样的
var barocode = intent.getByteArrayExtra("barocode");
var barCodeStr2 = String.fromCharCode.apply(String, barocode);.我这边是这样取的
2020-06-30 16:27