因为要做扫描枪的事件监控。
本来监听document的keydown事件蛮好。
但在uniapp里不知道怎么写。。求高手指点

- 发布:2018-12-16 23:24
- 更新:2021-10-16 16:18
- 阅读:28295

来来去去 (作者)
不好意思,一直没来看。我的问题解决了。
我用的是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