关于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>

猜你喜欢

转载自blog.csdn.net/weixin_44897255/article/details/129155759