【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

相关文章

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论