美文网首页
2022-05-16 uniapp 开发pda扫描

2022-05-16 uniapp 开发pda扫描

作者: jinya2437 | 来源:发表于2022-12-11 11:43 被阅读0次
    前言

    我们知道PDA(优博讯)设置模块-输出方式 有键盘方式输出 和广播输出
    ①.键盘方式输出,直接调用uniapp的文本框回车能拿到扫描的值
    ②.广播输出需开发些额外代码,需获取【广播动作】A和【广播数据标签】B。以下讲解用A与B指代了

    问题点:PDA是基恩士牌子(PDA设置模块-广播方式输出),从浏览器测试是OK的。安装apk后需扫2次才获取到值。解决方案:采用广播方式输出

    先贴2张图,这里是优博讯的扫描设置


    1670815827937_44FDFCB3-D39A-4d29-BAE9-F4BB776F2FAF.png 1670815866773_D11B2059-8DFF-492e-AE98-975203F71976.png

    1、定义扫描工具类scanCode.js

    let main;
    let filter;
    let receiver;
    let tag = false;
    /**
     * 开始广播监听扫码
     */
    const start = () => {
      /* #ifdef APP-PLUS */
      main.registerReceiver(receiver, filter);
      /* #endif */
    }
    
    
    /**
     * 停止广播监听扫码
     * that:传this;
     */
    const stop = () => {
      /* #ifdef APP-PLUS */
      main.unregisterReceiver(receiver);
      /* #endif */
    }
    
    
    /**  剩余下个变量已经做了全局变量
     *
     * 定义广播
     * that:传this;
     */
    const init = (onReceive) => {
      /* #ifdef APP-PLUS */
      //获取activity
      main = plus.android.runtimeMainActivity();
      const IntentFilter = plus.android.importClass('android.content.IntentFilter');
      filter = new IntentFilter();
      // 扫描设置的广播名称A(上面指代了)
      filter.addAction("android.intent.ACTION_DECODE_DATA");
      receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
        onReceive: function(context, intent) {
          plus.android.importClass(intent);
          // 扫描设置的标签名称B(上面指代了)
          const code = intent.getStringExtra("barcode_string");
          if (tag) return;
          tag = true;
          setTimeout(function() {
            tag = false;
          }, 150);
          //到这里扫描成功了,可以调用自己的业务逻辑,code就是扫描的结果    return出code进行业务处理
          onReceive && onReceive(code);
        }
      });
      /* #endif */
    
    }
    
    export const broadcastScan = {
      init,
      start,
      stop,
    };
    
    
    

    2.挂在vue原型链上 ,在main.js

    import {broadcastScan} from '@/common/scanCode'
    Vue.prototype.$broadcastScan=broadcastScan
    

    3.调用函数获取扫描的值

     onLoad(option){
        this.$broadcastScan.init(this.getScancode);
      },
      onUnload() {
        this.$broadcastScan.stop();
      },
      onHide() {
        this.$broadcastScan.stop();
      },
      onShow() {
        this.$broadcastScan.start();
      },
     methods:{
        getScancode(code){
          // 有些PDA会自带换行符,trim函数处理下
          code=code.trim()
          //code就是扫描获取的值
           console.log(code)
        },
    }
    

    相关文章

      网友评论

          本文标题:2022-05-16 uniapp 开发pda扫描

          本文链接:https://www.haomeiwen.com/subject/wvfwurtx.html