手持终端的广播扫描

手持终端app开发流程
  • pda显示安卓9+,有可能不支持无线连接
  • 设置中找到版本号,点7下开启开发者模式
  • 进入开发者选项,查看到usb调式,未发现无线配对码
  • 开启usb调试,允许设备被更改(此时需要使用usb连接pda和电脑)
  • pda连接电脑热点,电脑输入命令行adb connect ip,IP地址为pda设置中的ip
  • 提示连接成功(connect to ip:端口),可以启用hbuilderx运行app

在浏览器上开发的时候可以设置pda相同分辨率来更好做界面调整

  1. 在PC端进入命令窗口(win + R组合键后,输入cmd)。
  2. 输入adb shell进入Linux命令行。
  3. 输入wm size,查看分辨率。
  4. 输入wm density查看dpi。
PDA支持无线连接的命令行
  • 设置中找到版本号,点7下开启开发者模式
  • 进入开发者选项,查看到无线调式,打开后点进去发现配对码
adb pair 配对码界面ip(配对码ip地址和端口)
xxxxxx(6位配对码)
adb connect 外部ip(IP地址和端口)
PDA扫码兼容问题(广播)

工具类ScanResultHelperUsingIntent

/**
 * PDA扫码后,通过Intent将扫码结果传递给应用,需要在PDA上设置动作名称,启用广播传递Intent的功能,有些还可以设置广播数据标签(有些不能)
 *
 */
export default abstract class ScanResultHelperUsingIntent {
  public ScanCodeHandler: (code: string) => any = () => {}
  public ScanCodeCooldownDuration: number = 200
  /**
   * 动作名称
   */
  protected abstract ActionName: string
  /**
   * 数据标签
   */
  protected abstract Label: string

  protected mainActivity: any
  protected intentFilter: any
  protected receiver: any
  protected isInited = false
  protected isHandlerDisabled = false
  protected isRegistered = false
  protected cooldownEnable = false
  protected Init() {
  /**
   * interface plus  在文件node_modules\@dcloudio\types\html5plus\plus.d.ts
   * HTML5+接口,统一浏览器自定义扩展,提供增强的功能、性能扩展规范,使得开发者可开发出跨平		台的app,并接近原生的功能和性能。
   * 参考:[http://www.html5plus.org/doc/h5p.html(http://www.html5plus.org/doc/h5p.html)
   */
   /**
     * android: PlusAndroid;
     * Native.js for Android封装一条通过JS语法直接调用Native Java接口通道,通过plus.android可调用几乎所有的系统API。
     *
     * 参考: [http://www.html5plus.org/doc/zh_cn/android.html](http://www.html5plus.org/doc/zh_cn/android.html)
     */
     /**
     * runtimeMainActivity(): PlusAndroidInstanceObject;
     * 获取应用主Activity实例对象
     * Android平台完整Java类名为android.app.Activity,完整API请参考Android开发文档
     * 参考: [http://www.html5plus.org/doc/zh_cn/android.html](http://www.html5plus.org/doc/zh_cn/android.html)
     */
     /**
 * interface PlusAndroidInstanceObject
 * Java实例对象
 * Java实例对象,可通过其方法来操作实例的变量和方法。
 * 	注意:必须通过plusGetAttribute()方法读取实例对象的属性值,通过plusSetAttribute()方法设置实例对象的属性值。
 *
 * 参考: [http://www.html5plus.org/doc/zh_cn/android.html](http://www.html5plus.org/doc/zh_cn/android.html)
 */
   
    this.mainActivity = plus.android.runtimeMainActivity()
    this.InitIntent()
    this.InitReceiver()
  }

  protected InitIntent() {
    const IntentFilter = plus.android.importClass('android.content.IntentFilter') as any
    this.intentFilter = new IntentFilter()
    this.intentFilter.addAction(this.ActionName)
  }

  protected InitReceiver() {
    this.receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
      onReceive: (context, intent) => this.OnReceive(context, intent)
    })
  }

  protected OnReceive(context, intent) {
    try {
      const code = this.GetScanResultByIntent(intent)
      // 如果不是禁止操作或者冷却期,就开启冷却期和scan操作
      if (!this.isHandlerDisabled && !this.cooldownEnable) {
        this.StartScanCodeCooldown()
        this.ScanCodeHandler(code)
      }
    } catch (err) {
      console.error(err)
    }
  }

  protected GetScanResultByIntent(intent: any): string {
    plus.android.importClass(intent)
    return intent.getStringExtra(this.Label)
  }

  protected StartScanCodeCooldown() {
    this.cooldownEnable = true
    setTimeout(() => {
      this.cooldownEnable = false
    }, this.ScanCodeCooldownDuration)
  }

  Register() {
    if (this.isRegistered) {
      return
    }

    if (!this.isInited) {
      this.Init()
    }

    this.mainActivity.registerReceiver(this.receiver, this.intentFilter)
  }

  Unregister() {
    if (!this.isRegistered) {
      return
    }

    if (!this.isInited) {
      return
    }

    this.mainActivity.unregisterReceiver(this.receiver)
  }

  DisableHandler() {
    this.isHandlerDisabled = true
  }

  EnableHandler() {
    this.isHandlerDisabled = false
  }
}


配置某款pda的数据标签: 比如zebra

import ScanResultHelperUsingIntent from './ScanResultHelperUsingIntent'

const CustomActionName = 'andriod.intent.action.DEFAULT' //该值可以自定义,

export class ZebraScanResultHelper extends ScanResultHelperUsingIntent {
  protected override ActionName: string = CustomActionName
  protected override Label: string = 'com.motorolasolutions.emdk.datawedge.data_string' //TC21采用这个数据标签,不可修改
}

export const zebraScanResultHelper = new ZebraScanResultHelper()

定义使用pda的方法

import ScanResultHelperUsingIntent from './ScanResultHelperUsingIntent'
import { zebraScanResultHelper } from './zebra'
import i18n from '@/i18n/index'

const SupportPDA = {
  Zebra: 'zebra'
}

const CurrentPDA = SupportPDA.Zebra

export default function usePDAScanCode() {
  const helper = GetPDAScanResultHelperUsingIntent(CurrentPDA)
  let handlerBuffer: (code: string) => any
  const setScanCodeHandler = (handler: (code: string) => any) => {
    handlerBuffer = handler
  }
  const setHandlerEnable = (isEnable: boolean) => {
    if (isEnable) helper.EnableHandler()
    else helper.DisableHandler()
  }
  // #ifdef APP-PLUS
  helper.Register()

  onShow(() => {
    setHandlerEnable(true)
    helper.ScanCodeHandler = handlerBuffer
  })

  onHide(() => {
    helper.ScanCodeHandler = () => {}
    setHandlerEnable(false)
  })

  // #endif

  // #ifndef APP-PLUS
  console.warn('暂时不支持在此平台上启用PDA扫码功能')
  // #endif

  return { setScanCodeHandler, setHandlerEnable }
}

function GetPDAScanResultHelperUsingIntent(PDAName: string): ScanResultHelperUsingIntent {
  switch (PDAName) {
    case SupportPDA.Zebra:
      return zebraScanResultHelper

    default:
      throw new Error(i18n.global.t('print.validator1'))
  }
}

pda上的应用如果不能正常输入扫码数据,可以检查pda上扫码工具是否关闭了应用获取,然后检查广播名称和广播动作,如果可以在pda上找到,就模仿zebra.ts配置数据标签。实在找不到就将广播改成焦点录入,可以正常读取数据,就是性能没广播好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值