当前位置: 首页 > news >正文

Android实现扫描二维码条形码,实现扫描快递单,相册图片识别快递单 最慢3秒出回调结果

首先给出我的参考链接地址
Android超方便 集成 Zxing实现扫一扫,闪光灯,生成二维码图片,解析二维码(条码)等功能
此篇文章发布时间结点是17年。。
当前文章发布时间节点是24年。。
请注意时间节点,以免造成原生版本导致的版本冲突问题

为什么要说时间节点问题呢?

随着时间发展,功能组件肯定是不断迭代的,就会导致可能会因为版本问题运行不了,我就是“受害者”,所以有了这篇文章。

可实现功能

当前依赖可实现以下功能,如不符合读者需求可跳过,节约宝贵的时间

  1. 摄像头扫描二维码条形码
  2. 打开相册识别图中的二维码条形码
  3. 可自定义设置打开相册时的界面
  4. 可自定义相册按钮和闪光灯按钮

如何使用

  1. minSdk 版本设置成 24 以上
    2.
  2. 引入jitpack库
maven { url 'https://jitpack.io' }
implementation  'com.github.zch-live:zxinglib:1.0.6'
  1. 调用扫描或者识别图片
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);ZxingConfig config = new ZxingConfig();//config.setShowbottomLayout(true);//底部布局(包括闪光灯和相册)//config.setPlayBeep(true);//是否播放提示音//config.setShake(true);//是否震动//config.setShowbottomLayout(true);//底部布局(包括闪光灯和相册)//config.setPlayBeep(true);//是否播放提示音//config.setShake(true);//是否震动config.setShowAlbum(false); //是否显示相册config.setShowBack(true); //显示左上角返回//config.setShowFlashLight(true);//是否显示闪光灯intent.putExtra(Constant.INTENT_ZXING_CONFIG, config);startActivityForResult(intent, 100866);

在这里插入图片描述

  1. 接收结果
 @Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == 10086){if (data != null){String content = data.getStringExtra(Constant.CODED_CONTENT);if (content == null || content.contains("失败")){//识别失败tv3.setText("请提供真实,清晰,完整的条码");//失败了,终极解决办法,判断是不是高版本机型 > android11 ,有没有所有文件访问权限,建议只请求一次// 请求一次不要通过是否已开启访问权限去判断,亲测无效果// 建议通过本地存储是否请求过来限制访问次数(敏感权限)if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {//弹窗提示去开启所有文件访问权限Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);startActivity(intent);}}else {//识别成功tv3.setText("扫描结果:" + content);}}}}

在这里插入图片描述

完结撒花,以上就是识别步骤了

GitHub地址

使用说明1

打开界面的时候,通过传入参数去动态设置想要达到的效果
在这里插入图片描述
具体参数如下
在这里插入图片描述
其实摄像头扫描功能是比较好做的,因为大多数底层还是使用 Zxing ,如果你只需要摄像头扫描,可以看下这篇文章 第三方ZXing库zxing-android-embedded使用及自定义

主要复杂的是打开相册对图片的识别,以及识别过程中所产生的损耗

目前项目主要是识别快递单号中的条形码,在参考文章中,大多数只是对单独显示的条形码图片或者二维码图片才能识别出内容,当一整张快递单号放上去时,会因为转码量过大等,造成识别失败(图片源自网络,如有侵权联系即刻删除,无商业用途)

所以再次基础上进行改造,可对整张快递单进行扫描出结果,亲测识别结果最慢3秒可给出回调

在这里插入图片描述

原理如下:

  1. 识别图片时针对条形码进行识别
  2. 整张快递单号进行切割分段识别
  3. 分段切割5-8次,过程中有识别成功者中断识别,进行回调
使用说明2

依赖中已经有默认的界面,如不符合当前开发需求,可支持自定义界面,
要注意的是自定义界面时要与主要控件 id 对应,否则无效果(并不会报错)

默认打开相册识别界面如下
在这里插入图片描述

具体使用如下
在这里插入图片描述

/*如果需要自定义选择相册界面,使用此代码,在跳转之前调用即可选择按钮要使用 TextView 并且id 必须命名为 albumButton选择按钮要使用 TextView 并且id 必须命名为 tvLoading*/View photoView = LayoutInflater.from(this).inflate(R.layout.photo_view, null);// 通过 findViewById 去设置自己想要显示的内容PhotoView.setPhotoView(photoView);

对应id如下

在这里插入图片描述

使用说明3

使用前别忘了动态申请下权限,文中获取权限代码如下
部分高版本手机会存在 /0 目录下图片识别失败的情况,可以试下上述回调代码中终极解决办法-所有文件访问权限

 /*动态申请权限操作*/private boolean isPermissionRequested = false;public void requestPermission() {if (Build.VERSION.SDK_INT >= 23 && !isPermissionRequested) {isPermissionRequested = true;ArrayList<String> permissionsList = new ArrayList<>();String[] permissions = {//在这里加入你要使用的权限Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,};for (String perm : permissions) {if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(perm)) {permissionsList.add(perm);// 进入这里代表没有权限.}}if (!permissionsList.isEmpty()) {String[] strings = new String[permissionsList.size()];requestPermissions(permissionsList.toArray(strings), 0);}}}

结尾: 如有其他问题可评论共同讨论


http://www.mrgr.cn/news/61239.html

相关文章:

  • web worker 前端多线程学习一、
  • 第 5 场 算法季度赛
  • 使用 C# 制作图像的特写窗口
  • 第五章:计算机网络
  • 51c自动驾驶~合集46
  • 回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测
  • WordPress中最值得推荐的AI插件:专家级指南
  • 【动手学强化学习】part7-Actor-Critic算法
  • 自适应神经网络架构:原理解析与代码示例
  • linux系统安装软件的三种方式
  • JavaEE初阶------网络编程续+传输层UDP协议介绍
  • WebGL 3D基础
  • 当变频器报警过热故障时,如何处理
  • 基于SSM的智能台球厅系统
  • CAN物理层(ISO 11898-2 2024)
  • 《掌握 Java:从基础到高级概念的综合指南》(11/15)
  • 解决goravel/gorm自动迁移AutoMigrate 时会将关联关系也一并迁移问题
  • 结合无监督表示学习与伪标签监督的自蒸馏方法,用于稀有疾病影像表型分类的分散感知失衡校正|文献速递-基于生成模型的数据增强与疾病监测应用
  • stm32入门教程--DMA 超详细!!!
  • 免费的一键抠图软件有哪些?5个软件帮助你快速进行一键抠图
  • JavaScript Date对象 、日期求差
  • 工商业光储充新能源电站用 安科瑞ACCU-100微电网协调控制器
  • redis修改配置文件配置密码开启远程访问后台运行
  • 解决minio跨域问题
  • springboot民大校园美食推荐系统-计算机毕业设计源码10508
  • 把你的产品宣传册制作成这种3D宣传册,瞬间提升档次