uniap实现监听优博讯红外扫码广播【js篇】

调试的设备一定需要在扫描设置里,选择 intent输出,这样广播模式才会生效。

Alt

js文件模式:
创建scanCode.js文件,核心代码如下:

let main, receiver, filter; 
let _httpLoading = false; // 请求的拦截变量
// 初始化--【扫码】
export const initScan = () => {
	// #ifdef APP-PLUS
	main = plus.android.runtimeMainActivity(); //获取主activity
	let IntentFilter = plus.android.importClass("android.content.IntentFilter"); //获取android意图过滤类
	filter = new IntentFilter(); //实例化意图过滤
	filter.addAction('android.intent.ACTION_DECODE_DATA');//广播动作android.intent.ACTION_DECODE_DATA 
	receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
		onReceive: function (context, intent) {
			//这里获取intent.getAction(),会导致运行报错,如果需要查看当前广播动作是不是你需要的,试试这个方法:回调函数外  声明 var intent = main.getIntent(); 
			plus.android.importClass(intent);
			let code = intent.getStringExtra('barcode_string'); // 广播字符串数据标签
			//如果需要字节数据标签的数据格式,可以intent.getExtra('barcode'),后续数据自行处理
			queryCode(code)
		}
	});
	// #endif
};
export const startScan = () => {
	// #ifdef APP-PLUS
	main.registerReceiver(receiver, filter); //开始监听广播
	// #endif
};
export const stopScan = () => {
	// #ifdef APP-PLUS
	main.unregisterReceiver(receiver); //停止监听广播
	uni.$off('SCAN_CODE'); //解绑uni全局监听事件
	// #endif
};

const queryCode = (code) => {
	// 有些PDA会自带换行符,trim函数处理下
	code = code.trim()
	if (_httpLoading) return;
	_httpLoading = true;
	setTimeout(() => {
		_httpLoading = false
	}, 200)
	uni.$emit('SCAN_CODE', {
		code
	})
}

代码里,使用到的【广播动作】和【广播字符串数据标签】都可以在 扫描设置里–> intent输出块 获取到
alt

使用方法如下:

1.在使用页面的created:   initScan();
2.在使用到该功能的页面onShow()时:
 startScan();
let _this = this
 uni.$off('SCAN_CODE') //每次使用前,移除全局自定义事件监听器
 uni.$on('SCAN_CODE', (res) => {
	console.log('识别到的条形码是:===', res.code);
 })
 3.关闭
 destroyed() {
	stopScan(); //页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果
 }
// 注意:使用的生命周期,对回调函数有影响。初始化方法尽量前置。如果监听不到广播的话,尝试把js方式变更为component方式,直接引入组件形式进行使用

如果需要设置扫码功能的其他设置(比如提示声音,振动,以及扫描的输入方式动态设置等),需要参考优博讯的【扫描文档】

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值