手持 PDA 是 Android 平台,其扫码的解决方案也有摄像头和激光扫描等多种解决方案,这里结合 uni-app 的开发特性,记录一下具体的实现方案。
扫码方案
现阶段来说,读取一段 Barcode(也可能是 QRcode,以下我都用 Barcode 代替表述)的方式无非两种主要方式和一种附加方式,主要方式包含摄像头和激光,附加方式则需要将 Barcode 转为RFID方式,后者不再此赘述。
摄像头
摄像头扫码兼容性最高,也是一种软解的解决方案,理论上只要带有光学摄像头的终端设备都可以实现解码过程,但是其解码过程很依赖终端性能,有些低端设备搭载的摄像头在对焦上需要花费更多的时候,这对一些高度依赖效率的工作内容产生一定的阻碍,比如大批量的工单扫码。
因此,使用摄像头扫码方案也是可以达到可以使用的层级,如果需要应付一些追求效率的内容就显得相对困难。
uni-app 自带的调用摄像头方法
uni.scanCode({
//成功回调
success: function (res) {
//条码类型
console.log(res.scanType);
//条码的值
console.log(res.result);
},
//失败回调
fail: function (res) {
},
//完成回调
complete: function (res) {
},
});
缺点: UNI官方为考虑多平台使用,兼容太多,导致组件使用会存在扫码功能出现误差 或者 卡死现象
建议: 使用支付宝扫码插件
激光
这是硬解的方案,扫码的速度远高于需要唤醒过程的摄像头扫码方式,激光扫码几乎可以实时返回结果。不过其依赖Android 8以上的版本才可以通过广播的方式被应用监听,因此在开发的过程中会造成一些阻碍。无论是原生的Android开发方式,还是像uni-app的跨平台解决方案,都需要在激光扫描模块获取到结果后向系统发出一条广播,接着可以通过应用监听广播的方式来获取扫码结果。
uni-app 内如何使用
在SUPOIN设备上,需要手动设置广播:
设置 ==> 自定义广播 √
广播字段名称 com.android.server.scannerservice.broadcast
数据字段名称 scannerdata
扫码服务设置 ==> 使能所有条码类型 √
使能一维条码类型 √
使能二维条码类型 √
在另一些设备上,系统是没有广播设置的,不过一般厂家都会带上自己的硬解扫码工具供用户配置,具体的细节可以咨询对应的厂家。
然后,我们需要确定 2 个变量的值:
广播动作和广播标签,你可以简单的将这两个变量理解为key-value,这两者都可以在设备上进行自定义设置,如果没有设置项,需要向厂家了解。
封装组件
创建一个激光扫码的组件,我们在这里是/components/scan/scan.vue,并写入以下代码:
<template>
<view class="content"></view>
</template>
<script>
// #ifdef APP-PLUS
var main, receiver, filter;
var _codeQueryTag = false;
export default {
data() {
return {
};
},
created: function(option) {
this.initScan(

本文介绍了一种在uni-app平台上实现激光扫码功能的方法,包括如何通过广播监听扫码结果及使用激光扫描组件的具体步骤。

2万+

被折叠的 条评论
为什么被折叠?



