2022-05-16 uniapp 開發(fā)pda掃描

前言

我們知道PDA(優(yōu)博訊)設置模塊-輸出方式 有鍵盤方式輸出 和廣播輸出
①.鍵盤方式輸出,直接調(diào)用uniapp的文本框回車能拿到掃描的值
②.廣播輸出需開發(fā)些額外代碼,需獲取【廣播動作】A和【廣播數(shù)據(jù)標簽】B。以下講解用A與B指代了

問題點:PDA是基恩士牌子(PDA設置模塊-廣播方式輸出),從瀏覽器測試是OK的。安裝apk后需掃2次才獲取到值。解決方案:采用廣播方式輸出

先貼2張圖,這里是優(yōu)博訊的掃描設置


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;
/**
 * 開始廣播監(jiān)聽掃碼
 */
const start = () => {
  /* #ifdef APP-PLUS */
  main.registerReceiver(receiver, filter);
  /* #endif */
}


/**
 * 停止廣播監(jiān)聽掃碼
 * that:傳this;
 */
const stop = () => {
  /* #ifdef APP-PLUS */
  main.unregisterReceiver(receiver);
  /* #endif */
}


/**  剩余下個變量已經(jīng)做了全局變量
 *
 * 定義廣播
 * 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);
      //到這里掃描成功了,可以調(diào)用自己的業(yè)務邏輯,code就是掃描的結果    return出code進行業(yè)務處理
      onReceive && onReceive(code);
    }
  });
  /* #endif */

}

export const broadcastScan = {
  init,
  start,
  stop,
};


2.掛在vue原型鏈上 ,在main.js

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

3.調(diào)用函數(shù)獲取掃描的值

 onLoad(option){
    this.$broadcastScan.init(this.getScancode);
  },
  onUnload() {
    this.$broadcastScan.stop();
  },
  onHide() {
    this.$broadcastScan.stop();
  },
  onShow() {
    this.$broadcastScan.start();
  },
 methods:{
    getScancode(code){
      // 有些PDA會自帶換行符,trim函數(shù)處理下
      code=code.trim()
      //code就是掃描獲取的值
       console.log(code)
    },
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容