uniapp做PDA扫码功能

uniapp做pda扫码有两种方式,

第一种利用输入框(input)做,体验感不好

第二种利用pda系统的系统广播做,能即时刷新数据

第一

选择系统中广播模式

或者

两种手机型号不一样

第二

在components中加公共组件直接调用

scan-code.vue

<template>  
    <view class="content"></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(){    
        /*页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果*/    
        this.stopScan();    
    },    
    methods: {  
        initScan() {  
			
            let _this = this;  
            main = plus.android.runtimeMainActivity();//获取activity  
            var IntentFilter = plus.android.importClass('android.content.IntentFilter');   
            filter = new IntentFilter();  
            filter.addAction("com.scanner.broadcast"); // 换你的广播动作  (条码广播名)
            receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver',{  
            onReceive : function(context, intent) {  
				
                plus.android.importClass(intent);     
                let code = intent.getStringExtra("data");// 换你的广播标签  (条码键值名)
                _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);  
            var id = code  
            
            uni.$emit('scancodedate',{code:id})  
        }  
    }  
}  
</script>  

<style>  
    page {  
        background-color: #efeff4;  
    }  
    .content {  
        text-align: center;  
    }  
</style>

在需要扫码的组件中直接调用

<template> 
    <!-- 自己的组件内容 -->
    
    <!-- 引用组件 -->
    <scan-code></scan-code>

</template>  

<script>  
var main,receiver,filter;    
var _codeQueryTag = false;    
export default {  
    data() {  
        return {  
            scanCode: ''  
        }  
    },
    onLoad: function (option) {
		
		uni.$off('scancodedate') // 每次进来先 移除全局自定义事件监听器  
		
		uni.$on('scancodedate',function(data){

			console.log(data.code)
			
		})
		
    },  
       
}  
</script>  

<style>  
   
</style>

在退出页面或者跳转页面时

一定要清除事件 uni.$off('scancodedate')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值