uni-app PDA扫描

1.前言

  • PDA扫码是工厂项目中是非常常见的功能,这里记录下工作中的开发思路和模板,仅供参考
  • PDA扫码模式:模拟输入和广播模式
  • 模拟输入:模拟键盘输入,一般后面会设置追加一个回车,优点是通用型强,缺点是每次扫描前需要先获取焦点,且弹出的软键盘会遮挡页面布局
  • 广播模式:通过底层的广播进行事件驱动,优点是无须获取焦点,可随意扫码,缺点是需要进行适配(根据不同的设备型号适配对应的广播名称),二是如果页面有多个输入框,则需要额外的逻辑进行当前扫描属于哪个输入框

2.流程步骤

  • 启动App时进行初始化(main.js)
// #ifdef APP
//初始化pda扫码
import pda from '@/libs/util/pda.js'
pda.initScan()
// #endif
  • 页面监听:当广播扫码触发时,触发当前页面的handlePdaScan方法
<script>
export default{
    methods: {
        //对接pda扫码
		handlePdaScan(code){
			
		},
    }
}
</script>
  • 不推荐使用公共组件:一是每个页面都需要引入和销毁,增加代码体积,二是后台页面也会响应扫描,增加出bug的风险

3.广播扫描插件的代码

var main = null
var filter = null
var receiver = null

//适配的pda列表
var pdaList = [
	
]

//当前设备型号
var model = plus.device.model.toLowerCase()


var pda = {
	initScan() {
		//  #ifdef APP
		main = plus.android.runtimeMainActivity() //获取activity
		var context = plus.android.importClass('android.content.Context') //上下文
		var IntentFilter = plus.android.importClass('android.content.IntentFilter')
		filter = new IntentFilter()
		//获取action
		var action = getAction()
		filter.addAction(action)
		
		 
		receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
			onReceive: (context, intent) => {
				//能接收到广播说明当前设备为pda设备(未启用)
				getApp().globalData.isPda = true
				
				
				plus.android.importClass(intent)
				var name = getName()
				var code = intent.getStringExtra(name)
				//拿到当前页面
				var nowPage = getCurrentPages().pop()
				//调用当前页面的方法,将结果传递过去
				nowPage.$vm.handlePdaScan && nowPage.$vm.handlePdaScan(code)
			}
		})
		
		main.registerReceiver(receiver, filter)
		// #endif
	}
}

//匹配Action
function getAction(){
	var target = pdaList.find(item=>{
		return item.model.toLowerCase() == model
	})
	if(target){
		return target.action
	}else{
		return "com.juqent.scan"
	}
}

//匹配name
function getName(){
	var target = pdaList.find(item=>{
		return item.model.toLowerCase() == model
	})
	if(target){
		return target.name
	}else{
		return "data"
	}
}

export default pda
posted @ 2024-10-21 16:21  ---空白---  阅读(118)  评论(0编辑  收藏  举报