来来去去
来来去去
  • 发布:2018-12-16 23:24
  • 更新:2021-10-16 16:18
  • 阅读:26657

uniapp怎么实现 页面监听keydown事件?

分类:uni-app

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

2018-12-16 23:24 负责人:无 分享
已邀请:
来来去去

来来去去 (作者)

不好意思,一直没来看。我的问题解决了。
我用的是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就是扫描的结果  
},  

  • 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

4***@qq.com

4***@qq.com

虫雪浓

虫雪浓 - 热爱生活,热爱编程

因为uni-app运行在手机端,没有键盘事件,所以不支持按键修饰符。
可以给一个整屏的元素 添加点击事件来达成一样的功能。

2***@qq.com

2***@qq.com - 前端十三叔

兄弟,这个问题你解决了吗?

uniapper

uniapper - abc

试试下面的代码:

<template>  
<view>  
  <input type="text" 	@input="onInput"  value="" />  
</view>  
</template>  
<script>  
export default {  
  methods: {  
      onInput (e) {  
        console.log(e.detail.value)				  
      }  
    }  
}  
</script>
  • 2***@qq.com

    这个是可以,但是会出现软键盘。


    2019-03-09 14:45

7***@qq.com

7***@qq.com

我也有个需求要用到扫码枪事件监控, 一直不知道如何解决...

p***@163.com

p***@163.com

现在你解决了嘛?

来来去去

来来去去 (作者)

我是从这一篇文章中模仿着做的
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

w***@163.com

w***@163.com

感谢作者, 超级好用。 试了半天, 把广播模式打开就可以了

g***@gmail.com

g***@gmail.com

感谢作者,已经解决了问题。
我这边是pda里面有个设置,可以设置在硬件扫码后进行的操作,可以有选择:

  1. 接受扫码输入 ------聚焦到一个输入框,再扫,得到的内容会进入到输入框里面去
  2. 通过广播模式下,进行分发,也就是走作者的第二条线
    在这里需要修改这两句代码,把引号的内容换成厂家提供的
    filter.addAction("com.se4500.onDecodeComplete"); ------ 注册的广播
    let code = intent.getStringExtra("se4500"); -----广播的内容
    是在iData提供的Android源码里面找到的这个内容
lifeng_dev

lifeng_dev

我目前遇到的问题:
利用监听广播获取到pda终端的scan扫描按钮的扫描结果,也能正常返回
唯一的问题就是,有时候会出现,按下pda自带的scan按钮,没反应,必须要点开(或者说重启)pda自带的一个安卓demo(估计是原生做的,里面有扫描后是振动还是声音的设置,有广播的相关设置,就是你的广播监听的代码要和里面的数据写的一样)

  • lifeng_dev

    这个问题该怎么解决,只能每次scan按钮不管用了,手动去点开一下pda自带的demo吗?


    2019-12-19 10:37

  • n***@qq.com

    层主,能看一下监听广播的代码吗,我用了例子还是没有反应


    2020-09-05 15:08

偶啊酱

偶啊酱

但是这个针对同一种机型,我想问下兼容不同的pda的话应该用哪种方法啊

  • 8***@qq.com

    判断Pda 的手机品牌 然后枚举列出 他们的 两者不同的地方 就在 filter.addAction("com.se4500.onDecodeComplete"); intent.getStringExtra()


    2020-05-27 11:14

  • 偶啊酱

    回复 8***@qq.com:请问 有示例吗


    2020-06-19 11:31

wuing

wuing - 一名喜欢uni-app的开发者

谢谢楼主

l***@sina.com

l***@sina.com

谢谢楼主,亲测好用,顶上去

5***@qq.com

5***@qq.com

谢谢分享,调试成功了,提示一下:
filter.addAction("com.se4500.onDecodeComplete"); intent.getStringExtra()
两个地方的值是扫码设置里面可以自定义的,如:


供参考。

  • h***@163.com

    请问下uniapp如何真机调试


    2021-05-18 15:22

DCloud_UNI_GSQ

DCloud_UNI_GSQ

试试:https://ext.dcloud.net.cn/plugin?id=2548

r***@chinacnd.com

r***@chinacnd.com

请问PDA的安卓系统有要求吗? 您用的PDA是什么品牌?那个型号的,可以分享下吗?

d***@163.com

d***@163.com

实测可用,感谢分享

  • p***@umedcloud.com

    我想问下,你是怎么解决在获取扫码枪扫描数据的时候 中英文联想输入的呢 ?


    2022-07-26 11:00

该问题目前已经被锁定, 无法添加新回复