PDA按键扫描功能

该博客介绍了一个在Vue.js中创建的通用扫码组件,通过注册和接收Android的广播来实现实时扫码功能。当接收到广播事件时,组件会触发自定义事件将扫码结果传递给父组件。在父组件中,可以通过监听这个事件来处理扫码后的业务逻辑。代码示例展示了如何在组件和父页面之间进行通信,确保在页面生命周期的不同阶段正确地启动和停止扫码监听。

创建通用组件

<template>
    <view></view>
</template>

<script>
    var main, receiver, filter;
    var _codeQueryTag = false;
    export default {
        data() {
            return {
                scanCode: ''
            }
        },
        created: function(option) {
            this.initScan()
            this.startScan();
        },
        onHide: function() {
            this.stopScan();
        },
        destroyed: function() {
            this.stopScan();
        },
        methods: {
            initScan() {
                let _this = this;
                main = plus.android.runtimeMainActivity();
                var IntentFilter = plus.android.importClass('android.content.IntentFilter');
                filter = new IntentFilter();
                //下面的addAction内改为自己PDA的广播动作
                filter.addAction("android.intent.ACTION_DECODE_DATA");
                receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
                    onReceive: function(context, intent) {
                        plus.android.importClass(intent);
                        //下面的getStringExtra内改为自己PDA的广播标签
                        let code = intent.getStringExtra("barcode_string");
                        _this.queryCode(code);
                    }
                });
            },
            startScan() {
                main.registerReceiver(receiver, filter);
            },
            stopScan() {
                main.unregisterReceiver(receiver);
            },
            queryCode: function(code) {
                if (_codeQueryTag) return false;
                _codeQueryTag = true;
                setTimeout(function() {
                    _codeQueryTag = false;
                }, 150);
                uni.$emit('scan', code)
            }
        }
    }
</script>

父组件调用:(根据页面逻辑进行相应的判断)

<template>
	<view>我是index页面</view>
    <!-- 还要记得这里加上组件 -->
    <scan></scan>
</template>

<script>
	export default {
		data() {
			return {
				code: ''
			}
		},
		onShow: function() {
			let that = this
			uni.$off('scan') // 每次进来先 移除全局自定义事件监听器
			// uni.$on('scan', function(data) {
            uni.$on('scan',(data)=> {
                that.account = ''
		        //扫码成功后的回调,你可以写自己的逻辑代码在这里
				// console.log('扫码结果:', data);
				setTimeout(()=>{
					this.code = data
					console.log(that.code)
				},300)
			})
		},
		methods: {

		}
	}
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cdlblbq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值