【uniapp】uni-app开发手持PDA上的激光扫码程序,uniapp主动触发pda激光扫码(附完整代码)

本文主要是介绍【uniapp】uni-app开发手持PDA上的激光扫码程序,uniapp主动触发pda激光扫码(附完整代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 项目需求

我们项目采购了Seuic东集CRUISE Ge-X3 工业级智能手机(PDA),PDA设备是Android9系统,带有激光扫码灯,现在要使用uniapp开发安卓程序,并实现在PDA设备上的激光扫码程序。

2. 前置条件

  1. 确保扫描工具已经正常启动,并在扫描工具中的设置-开发者选项中-获取指定的广播名称、键值名称等数据
    在这里插入图片描述
    在这里插入图片描述

  2. pda特色设置中关闭《禁止将扫描按键的键值传递给应用》的选项

在这里插入图片描述

3. 代码实现

激光扫码是硬解的方案,扫码的速度远高于需要唤醒过程的摄像头扫码方式,激光扫码几乎可以实时返回结果。不过其依赖Android 8以上的版本才可以通过广播的方式被应用监听,因此在开发的过程中会造成一些阻碍。无论是原生的Android开发方式,还是像uni-app的跨平台解决方案,都需要在激光扫描模块获取到结果后向系统发出一条广播,接着可以通过应用监听广播的方式来获取扫码结果。

下面是扫码的scanCode.js文件内容:

// pda的特色设置中需要关闭-禁止将扫描按键的键值传递给应用的开关
let mainActivity; // 运行时的主要活动activity
let intentFilter; // 实例化的意图过滤器
let broadcastReceiver; // 广播接收器
let repeatFlag = false;// 初始化定义广播
const init = (onReceiveCallback) => {/* #ifdef APP-PLUS */// 获取activitymainActivity = plus.android.runtimeMainActivity();// 导入类const IntentFilter = plus.android.importClass('android.content.IntentFilter');//实例化一个意图过滤器intentFilter = new IntentFilter();// addAction添加动作, com.android.server.scannerservice.broadcast为设备配置的广播名称intentFilter.addAction("com.android.server.scannerservice.broadcast");// BroadcastReceiver广播接收器接口:implements 实现接口  onReceive实现接口的方法broadcastReceiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {onReceive: function(context, intent) {plus.android.importClass(intent);// 扫描设置的开发者选项--手持机pda的广播键值scannerdataconst code = intent.getStringExtra("scannerdata");console.log('pda原始扫描数据:', code);//防重复if (repeatFlag) return;repeatFlag = true;setTimeout(function() {repeatFlag = false;}, 150);// 到这里扫描成功,获取结果,可以调用自己的业务逻辑onReceiveCallback && onReceiveCallback(code);}});/* #endif */
}// 开始广播监听扫码
const start = () => {/* #ifdef APP-PLUS */mainActivity.registerReceiver(broadcastReceiver, intentFilter);/* #endif */
}// 停止广播监听扫码
const stop = () => {/* #ifdef APP-PLUS */mainActivity.unregisterReceiver(broadcastReceiver);/* #endif */
}// 主动触发扫描
const triggerScan = () => {// 获取Android意图类let Intent = plus.android.importClass("android.content.Intent");// 实例化意图  let intent = new Intent();// 定义意图,由厂商提供(此处设置为东大的:开始扫描广播com.scan.onStartScan,对应的停止扫描广播为com.scan.onEndScan)intent.setAction("com.scan.onStartScan");// 广播这个意图mainActivity.sendBroadcast(intent);
}export const broadcastScan = {init,start,stop,triggerScan,
};// 引入使用
// 	import { broadcastScan } from './scanCode.js';

下面是uniapp页面中vue内容:

<template><view class="home-container"><view class="intro">广播名称:com.android.server.scannerservice.broadcast</view><view class="intro">广播键值:scannerdata</view><view class="intro">主动开始扫描广播:com.scan.onStartScan</view><view class="intro">主动结束扫描广播:com.scan.onEndScan</view><text class="intro">详见:</text><view class="href"><uni-link :href="href" text="Seuic东集-CRUISE Ge 工业级智能产品说明pdf"></uni-link></view><br /><view style="bth-list"><u-button type="primary" text="开始扫码" @click="openScan"></u-button></view><view class="result-container"><u--textarea v-model="result" autoHeight height='200'></u--textarea></view></view>
</template><script>import scanCode from '@/components/scanCode/scanCode.vue'; // 扫码接收import { broadcastScan } from '@/utils/scanCode.js';export default {data() {return {href: 'https://code.dt-insight.com/pdf?url=https://obs-dj-gym.obs.cn-east-3.myhuaweicloud.com/pdf/202205/1529643516374945792.pdf',result: '',}},methods: {// 自定义扫描的结果回调函数getScanCode(code) {let parseData = code.trim();console.log('自定义扫描的结果回调函数:', parseData);this.result = parseData;},// 主动触发扫描openScan() {broadcastScan.triggerScan();},},// onLoad 是在页面加载时触发,用于页面的初始化操作,只执行一次onLoad() {// init传入一个回调函数做参数,在扫描时候会将数据传入此方法里,然后处理此方法的自定义业务逻辑broadcastScan.init(this.getScanCode);},onUnload() {broadcastScan.stop();},// 在页面展示时触发,用于处理页面显示相关的逻辑,可能会多次执行,包括页面首次展示和从后台切换到前台时onShow() {broadcastScan.start();},onHide() {broadcastScan.stop();},}
</script><style lang="scss">.home-container {padding: 20px;font-size: 14px;line-height: 24px;.bth-list {display: flex;flex-direction: row;}.result-container {margin-top: 10rpx;border: 1px solid $u-primary;}}
</style>

4. 实现效果

激光扫码效果见如下视频

pda扫码效果

https://blog.csdn.net/ZhouLoverBrother/article/details/111169771
https://ask.dcloud.net.cn/article/40134

这篇关于【uniapp】uni-app开发手持PDA上的激光扫码程序,uniapp主动触发pda激光扫码(附完整代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/789276

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta