距离2022年终总结过去了还没一个月,我又回来写文章啦!
依稀记得当时给2023年立下的flag(文章链接:再见2022,我的点点滴滴!!!),其中之一就是:完成公司的“电子秤冷库APP项目”,在大饼的诱惑下,我拼命的码功能,终于从2023.01.04 写下第一行代码,到2023.01.18,完成所有功能,并产出第一个测试版本。(当然我前期的 demo案例功能测试也为其做出了巨大贡献,极大地缩短了开发所需的时间)。
这波APP功能开发过程中,敲得我每天手都是酸的,也再次让我重新认识了自己(我真是太牛掰了!!!)。这是除了刚入行时,半个月完成150张App页面之后,又一件让我印象很深的事。
在此特意进行记录下本次开发之旅,做一下总结收获,并且希望当大家有类似需求的时候,回想起我的这篇文章能有所启迪。
技术选型
- HBuilderX 进行uniapp项目的搭建
- Android Studio进行原生插件开发,以及离线打包测试
- UView 进行项目页面UI搭建
所需设备
- 安卓屏,(安卓4.0 版本不支持;目前开发使用的安卓6.0.1)
- 电子秤
- 打印机
- 扫码枪
实现功能
- 进行商品称重、商品信息标签打印
- 进行商品信息录入、入库,信息查询
- 进行商品扫码,出库
开发过程(相关功能实现,采取的技术方案)
1. 称重、打印
在本次项目开发中,电子秤、打印机采用的是串口通讯的方式。电子秤采用RS485串口接入安卓屏,打印机采用的RS232串口接入安卓屏。
因此,这个功能的实现离不开串口通讯。主要方法:与电子秤、打印机插件要相关串口通讯资料、demo,一般这些是采用安卓开发的,有相关原生的arr,支持在原生开发中直接调用已经封装好的方法。只需要在原生Android开发中直接引入就可以了。
但是问题来了,我们采用的技术是uniapp进行安卓开发,这下应当怎么办呢!想必大家还记得我之前的文章:uniapp开发安卓原生插件,这也是我在该项目开始之前,做的技术沉淀。
我们可以采用开发安卓原生插件的方式,将电子秤、打印机相关的原生arr,封装为可以在uniapp中使用的原生插件。这样我们就可以在该项目中对电子秤、打印机随心所欲的操控了!(我真是太机智了)。
注意事项:
在这里我再次强调一下原生插件过程中应当注意的事:
- 注意配置相关的签名
- 注意配置安卓包名,不能落了。
原生插件开发完毕后,我们可以在当前的项目中使用了。我们只需要在项目中添加nativeplugins
目录并进行相关配置即可。(具体的操作步骤详情,请看上一篇文章:uniapp开发安卓原生插件)
正常情况下,我们在运行到安卓屏中后可以完成电子秤、打印机相关的控制。那么如果我们要打包,在本机进行调试应该怎么办呢
1.1 云打包
采用云打包的形式,我们依靠HBuilder X 将我们的项目打包。在这个过程中,我们只需要输入当前应用的证书信息即可。我们可以静静的等待打包完成,由于采用了原生插件所需的时间有点长,我们可以去喝个咖啡或者吞云吐雾放松一下,回来你就会发现一切都已顺利完成!(当然如果是第一次,大概率会发现出 bug 了。不要怕,根据提示信息进行修改即可) 当时DCloud对开发者,每天可以进行云打包、制作自定义基座是有次数限制的,超额了需要花钱。作为一个勤俭持家的当代好青年,我们肯定不乐意,那么下面的:本地打包方案,就有效解决了我们的问题。
1.2 本地打包
我们采用HBuilder X 中本地打包功能,可以生成本地打包资源。然后我们可以将资源引入 官方为我们提供的 app离线sdk中的 HBuilder-Integrate-AS 中,然后在进行了配置后,可以在Android Studio中进行调试。
采用这种方案,我们可操作的空间更大,也更便于我们对一些问题的排查。
注意事项
- 我们要采用跟当前HBuilder X版本一致的 app离线sdk进行调试,否则会报:版本不一致,有潜在的问题
- 我们要提前将 sdk 总的项目配置好,签名、资源包
- 我们要将自主开发的原生插件导入到 lib中,并在 assets – dcloud_uniplugins.json 中进行配置
- 别忘了将 原生的打印机、电子秤arr也放到 lib中,否则有可能会出现异常
2. 扫码
扫码枪采用的USB连接,因此在项目中只需要在当前页面中监听 keydown
事件即可。然后将监听获取到的 keyCode 转换为对应的字符即可。
注意事项
在完成该功能进行自测阶段发现一个问题:
因为当前页面中有 input
组件,用户有可能进行了点击操作,此时 input
框聚焦,在这个时候就会出现一个现象:扫码枪获取到的值会作为输入值,输入到 input 中,这个时候页面的 keydown
监听是监听不到该行为的。
当用户取消input
聚焦后,再次进行扫码操作,此时会出现:扫码枪最后一个Enter操作消失,无法获取 keyCode === 66 这个值。
解决方法
思路:扫码枪造成的输入操作,所花费的时间远远小于用户输入的时间,因此可以设置个定时器,用来防止该行为的发生。
// 扫码枪输入内容
let inputValue = '';
// 扫码枪input定时器。防止input聚焦导致的问题
let scanTimer = null;
onLoad() {
uni.showLoading({
title: '加载中',
mask: true
});
// 添加键盘输入的监听;防止当前input 聚焦后,再次扫码,无法触发 enter
// #ifdef APP-PLUS
plus.key.addEventListener("keydown", (e) => {
if(!inputValue) {
uni.showLoading({
title: '扫码并获取信息中...',
mask: true,
})
}
if (e.keyCode === 66 || e.key =='Enter') {
// 根据获取的条形码数据,获取商品信息
clearTimeout(scanTimer);
scanTimer = null;
inputValue = '';
} else {
// keyMap 为 keyCode 对应的 字符表
inputValue += keymap[e.keyCode];
if(!scanTimer) {
scanTimer = setTimeout(() => {
scanTimer = null;
}, 2000)
}
}
});
// #endif
},
3. 商品信息录入,信息查询
要实现该功能的话,我们需要采用 官方提供的 SQLite(数据库)模块,相关资料可查看:SQLite官方文档 该模块在 下载的Android 离线SDK中可以找到(注意:要使用与开发版本一致的,防止出现未知的问题。)
我们创建数据库,然后针对不同的信息、查询需要,创建对应的数据表,即可。然后根据功能,进行增删改查。在开发中,可以将于数据库的相关操作、配置都提取出来,这样便于整体项目的使用,也便于问题的排查。
至此,该项目大致功能的思路都已经介绍完毕,希望对各位有所启发!
现在天选打工人的我还在上班,明天还有一天,公司坚持不到最后一天,绝不放假。各位看我这么命苦,赶快给我点个赞,鼓励鼓励我吧!!感谢!!
今天的文章uniapp安卓APP开发—电子秤冷库项目分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/17224.html