手持终端app开发流程
- pda显示安卓9+,有可能不支持无线连接
- 设置中找到版本号,点7下开启开发者模式
- 进入开发者选项,查看到usb调式,未发现无线配对码
- 开启usb调试,允许设备被更改(此时需要使用usb连接pda和电脑)
- pda连接电脑热点,电脑输入命令行
adb connect ip
,IP地址为pda设置中的ip - 提示连接成功(
connect to ip:端口
),可以启用hbuilderx运行app
在浏览器上开发的时候可以设置pda相同分辨率来更好做界面调整
- 在PC端进入命令窗口(win + R组合键后,输入cmd)。
- 输入adb shell进入Linux命令行。
- 输入wm size,查看分辨率。
- 输入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
配置数据标签。实在找不到就将广播改成焦点录入,可以正常读取数据,就是性能没广播好