关于uinapp 调用PDA设备激光扫码 - 广播模式

1. 不是所有的PAD设备 都有设置-扫描设置-然后选择广播模式(查看广播动作-广播标签),可能也是在pad设备自带扫描工具(app)参数设置里面–然后选择广播模式(查看广播动作/名称-广播标签/键值/key)

2 . 组件设置

		 <template>
			<view>
				<view class="content"></view>
			</view>
		 </template>
		  <!-- 激光扫码,广播模式 -->
		 <script>
			var main, receiver, filter;
			var codeQueryTag = false;
			export default {
				data() {
					return {
						scanCode: ''
					}
				},
				created() {
					this.initScan()
					this.startScan();
				},
				onHide() {
					this.stopScan();
				},
				destroyed() {
					this.stopScan();
				},
				methods: {
					initScan() {
						//  #ifdef APP
						console.log('initScan:扫码初始化');
						let that = this;
						main = plus.android.runtimeMainActivity(); //获取activity
						//var context = plus.android.importClass('android.content.Context'); //上下文
						var IntentFilter = plus.android.importClass('android.content.IntentFilter');
						filter = new IntentFilter();
						//下面的addAction 改为自己 pad 设备的广播动作(在扫描设置或者厂商附带的app 里面设置为广播模式,然后查看相应参数)
						filter.addAction("com.scanner.broadcast");
						receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
							onReceive: (context, intent)=> {
								console.log('---onReceive:',context, intent);
								plus.android.importClass(intent);
								//下面的getStringExtra内改为自己的广播标签(键值/key): data
								console.log('---***getStringExtra: ',intent.getStringExtra("data"));
								let code = intent.getStringExtra("data");
								console.log('---扫码data: ', code);
								that.queryCode(code);
							}
						});
						// #endif
					},
					startScan() {
						//  #ifdef APP
						console.log('startScan,开启广播接收');
						main.registerReceiver(receiver, filter);
						// #endif
					},
					stopScan() {
						//  #ifdef APP
						console.log('stopScan,结束');
						main.unregisterReceiver(receiver);
						// #endif
					},
					// 避免重复扫码
					queryCode: function(code) {
						//  #ifdef APP
						if (codeQueryTag) return false;
						codeQueryTag = true;
						setTimeout(function() {
							codeQueryTag = false;
						}, 150); 
						console.log('-****--扫码code: ',code);
						let data = code
						uni.$emit('xwscan', {
							code: data
						})
						// #endif
					}
				}
			}
		 </script>

** 3.** 调用

<template>
	<view class="content">
		<view class="uni-form-item uni-column">
			<view class="title">实时获取请扫描输入值:{{value}}</view>
			<u--input class="input" v-model="value" placeholder="请扫描" :focus="focus" clearable @input="onInput"
				@confirm="confirm"  @blur="blur"/>
		</view>
		<xw-scan></xw-scan>
	</view>
</template>

<script>
	// 广播模式激光扫码
	import xwScan from '@/components/padDevice/scan-code.vue'
	export default {
		components: {
			xwScan
		},
		data() {
			return {
				value: '',
				focus: false,
				scanTitle: "扫描结果",

			}
		},
		onLoad() {
			// plus.key.addEventListener('keydown', event => {
			// 	console.log("按键:" + event);
			// 	console.log("按键:" + event.keyCode);
			// 	if (event.keyCode == '139') {
			// 		uni.hideKeyboard();
			// 	}
			// });
		},
		onUnload() {
			// 移除监听事件      
			uni.$off('xwscan')
		},
		onShow() {
			uni.$off('xwscan') // 每次进来先 移除全局自定义事件监听器
			uni.$on('xwscan', (res) => {
			    console.log('扫码结果:', res.code);
			 	this.scanTitle = '激光扫码结果';
			 	this.value= res.code;
			})
		},

		methods: {
			focusHide(val) {
				let that = this
				// setTimeout(() => {
				that.focus = true;
				// }, 100)
				console.log('eeeee')
				// 这是隐藏自动弹出软键盘 (好像没有用)
				setTimeout(() => {
					uni.hideKeyboard();
				}, 100)
				
			},
			blur(){
				this.focus = false;
			},
			confirm(value) {
				// 自动多次扫码
				let that = this
				// that.value = ''
				setTimeout(() => {
					that.focus = false;
					that.$nextTick(() => {
						that.focus = true;
					});
					// that.value = ''
				}, 350)
				console.log('扫码结果:', value);
			},
			onInput(value) {
				this.value = value
			},
		}
	}
</script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值