红外扫码,条形码,小票打印,打印机

最近开始踩坑UNI-App,说一些碰到的坑

说起uniapp,作为前端的我听说和就是用vue做应用,突发好奇心,在这个新的安卓项目里过段推开了安卓的小哥(后悔),打算大显身手,不过使用中还是发现了一些诡异的问题。在此记录下供自己也供后人分享。

首先这次项目做的是手持终端的东西,终端用的是NF5501的共版,订购时厂家写好了底层,用的原生安卓6.0的系统。

摄像头扫码功能
二话不说先上代码:

//摄像机扫码赋值
	getSancode:function(){
		var that = this;
		uni.scanCode({
			success: function(res) {
				var result = res.result
				uni.showModal({
				    title: '提示',
				    content: '是否确认工单无误,即将派工给:'+result,
				    success: function (res) {
				        if (res.confirm) {
				            console.log('用户点击确定');
							that.postuser = reres;
				        } else if (res.cancel) {
				            console.log('用户点击取消');
				        }
				    }
				});
			}
		});
	},

很简单,可喜可乐~~~开心的我像个傻子。

红外线扫码
这就是个坑了,因为红外线扫码是设备的特殊功能,uni底层并没有能提供可以直接调用的方法,不过厂家也是好样的,随着摁下音量键,直接触发扫码,然后以系统广播的形式发送了扫码结果。enmmm,这里挂载,也就是激活init红外扫码硬件的工作是安卓小哥在项目打包时用Studio打进去的。

uni部分代码:

//开启服务监听
	initScan() {
		var that = this;
		console.log('开启了监听');
		let _this = this;  
		main = plus.android.runtimeMainActivity();//获取activity  
		var IntentFilter = plus.android.importClass('android.content.IntentFilter');   
		filter = new IntentFilter();    
		filter.addAction("com.qs.scancode"); // 换你的广播动作  
		receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver',{  
		onReceive : function(context, intent) {
			plus.android.importClass(intent);     
			let code = intent.getStringExtra("code");// 换你的广播标签  
			_this.queryCode(code);
			that.postuser = globe.repoint(JSON.stringify(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  
		console.log('id:', id)  
		uni.$emit('scancodedate',{code:id})  
	},

简单来说在初始的时候就要调用以下

created: function (option) {
	this.initScan();
	this.startScan();
},
onShow(){
	this.initScan();
	this.startScan();
},

结束时调用以下

onHide:function(){    
	this.stopScan();    
},  
destroyed:function(){    
	/*页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果*/    
	this.stopScan();    
},

至此红外扫码也告一段落了,接下来还有更坑的。

调用内置打印机(uni调用原生提供的插件)
这个项目中还有打印小票这个工序,-。-坑爹啊,这个东西啥也没咋调用,这个时候发现了牛逼Plus的大佬写的东西,因为一些原因我没办法提供安卓部分代码,不过我已经将名字改为了textdemo,安卓部分代码大家上uni官网直接Ctrl+C他的就行。

var testModule = uni.requireNativePlugin('TestModule');

testModule.testAsyncFunc({
	align:'1',
	width:'300',
	height:'300',
	string:that.postuser,
	print:'派工人:'+that.postuser
}, result => {  
	console.log(result.type)
});

对不起对不起,我知道这样有点糊弄,但是安卓代码真是拿不出了。。。

以上就是这个项目的3个主要模块了。扫码,打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值