来来去去
来来去去
  • 发布:2018-12-16 23:24
  • 更新:4 天前
  • 阅读:15869

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就是扫描的结果  
},  
  • 450819361@qq.com

    亲测好用,试了一天,原来是我的pda里有个设置,在广播模式下接受扫码!非常感谢

    2019-06-28 17:25

  • 桃子先生

    楼主,这个是怎么对应的啊,请赐教

    filter.addAction("com.se4500.onDecodeComplete");

    2019-07-21 04:35

  • 349322510@qq.com

    不行啊,没用,我还是没办法调到按键啊

    2019-10-19 17:38

  • 349322510@qq.com

    回复 450819361@qq.com: filter.addAction("com.se4500.onDecodeComplete"); 一定要这个??

    2019-10-19 18:10

  • 349322510@qq.com

    回复 450819361@qq.com: 这个怎么写

    2019-10-19 18:10

  • 看不清的世界

    我只能监听一次,后面再扫描就没用了,这是扫描情况呢?

    2020-03-20 09:33

  • 450819361@qq.com

    回复 349322510@qq.com: 这个是在你的PDA的设置里找到的

    2020-05-12 16:41

  • 349322510@qq.com

    回复 450819361@qq.com: 晕死,我找到了,前几天刚弄好这个,就是PDA给的那个SCAN包里有,,哎,,,

    2020-06-30 16:17

  • 349322510@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

450819361@qq.com

450819361@qq.com

虫雪浓

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

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

283362006@qq.com

283362006@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>
  • 283362006@qq.com

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

    2019-03-09 14:45

724776286@qq.com

724776286@qq.com

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

pwd1907@163.com

pwd1907@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

wangy_60915950@163.com

wangy_60915950@163.com

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

ghost.liu2015@gmail.com

ghost.liu2015@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

  • ncsvip@qq.com

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

    2020-09-05 15:08

偶啊酱

偶啊酱

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

  • 814566371@qq.com

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

    2020-05-27 11:14

  • 偶啊酱

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

    2020-06-19 11:31

1982118449@qq.com

1982118449@qq.com - 一名喜欢uni-app的开发者

谢谢楼主

linyiheng123@sina.com

linyiheng123@sina.com

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

573391755@qq.com

573391755@qq.com

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


供参考。

DCloud_UNI_GSQ

DCloud_UNI_GSQ

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

rcl@chinacnd.com

rcl@chinacnd.com

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

要回复问题请先登录注册