XQRCode 一个非常方便实用的二维码扫描、解析、生成库

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: XQRCode 一个非常方便实用的二维码扫描、解析、生成库

XQRCode


项目地址: github.com/xuexiangjys…


一个非常方便实用的二维码扫描、解析、生成库


特点


  • 支持快速集成条形码、二维码扫描功能。


  • 支持自定义扫描界面。


  • 支持二维码多次扫描。


  • 支持生成带图标的二维码。


  • 支持生成带背景图片的复杂二维码。


  • 支持二维码解析功能


1、演示(请star支持)


微信截图_20220514183353.png


2、如何使用


目前支持主流开发工具AndroidStudio的使用,直接配置build.gradle,增加依赖即可.


2.1、Android Studio导入方法,添加Gradle依赖


1.先在项目根目录的 build.gradle 的 repositories 添加:


allprojects {
     repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}


2.然后在dependencies添加:


dependencies {
  ...
  implementation 'com.github.xuexiangjys:XQRCode:1.0.6'
}


2.2、二维码扫描


默认二维码扫描


1.默认二维码扫描界面CaptureActivity

使用XQRCode.startScan直接调取默认二维码扫描。


XQRCode.startScan(this, REQUEST_CODE);


2.二维码的扫描结果通过Intent返回出来:


  • XQRCode.RESULT_TYPE:扫描结果类型,XQRCode.RESULT_SUCCESS代表扫描成功,XQRCode.RESULT_FAILED代表扫描失败。


  • XQRCode.RESULT_DATA:扫描二维码的数据内容。


3.自定义默认二维码扫描界面的主题样式:


<!-- 自定义默认二维码扫描界面的主题. -->
<style name="XQRCodeTheme.Custom">
    <item name="ViewfinderViewStyle">@style/ViewfinderView.Custom</item>
</style>
<style name="ViewfinderView.Custom">
    <item name="inner_corner_color">#123456</item>
    <item name="inner_corner_length">50dp</item>
    <item name="inner_corner_width">5dp</item>
    <item name="inner_scan_speed">20dp</item>
    <item name="inner_scan_isCircle">false</item>
</style>


4.自定义默认二维码扫描界面的界面样式,重写相关方法:


详细内容可参见CustomCaptureActivity


@Override
protected void beforeCapture() {
//做二维码采集之前需要做的事情
}
@Override
protected void onCameraInitSuccess() {
//相机初始化成功
}
@Override
protected void onCameraInitFailed() {
//相机初始化失败
}


下面的二维码扫描代码仅供参考:


/**
 * 开启二维码扫描
 */
@Permission(CAMERA)
private void startScan(ScanType scanType) {
    switch (scanType) {
        case DEFAULT:
            XQRCode.startScan(this, REQUEST_CODE);
            break;
        case DEFAULT_Custom:
            XQRCode.startScan(this, REQUEST_CODE, R.style.XQRCodeTheme_Custom);
            break;
        case REMOTE:
            Intent intent = new Intent(XQRCode.ACTION_DEFAULT_CAPTURE);
            startActivityForResult(intent, REQUEST_CODE);
            break;
        default:
            break;
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //处理二维码扫描结果
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        //处理扫描结果(在界面上显示)
        handleScanResult(data);
    }
    //选择系统图片并解析
    else if (requestCode == REQUEST_IMAGE) {
        if (data != null) {
            Uri uri = data.getData();
            getAnalyzeQRCodeResult(uri);
        }
    }
}
/**
 * 处理二维码扫描结果
 * @param data
 */
private void handleScanResult(Intent data) {
    if (data != null) {
        Bundle bundle = data.getExtras();
        if (bundle != null) {
            if (bundle.getInt(XQRCode.RESULT_TYPE) == XQRCode.RESULT_SUCCESS) {
                String result = bundle.getString(XQRCode.RESULT_DATA);
                ToastUtils.toast("解析结果:" + result, Toast.LENGTH_LONG);
            } else if (bundle.getInt(XQRCode.RESULT_TYPE) == XQRCode.RESULT_FAILED) {
                ToastUtils.toast("解析二维码失败", Toast.LENGTH_LONG);
            }
        }
    }
}
/**
 * 进行二维码解析
 *
 * @param uri
 */
private void getAnalyzeQRCodeResult(Uri uri) {
    XQRCode.analyzeQRCode(PathUtils.getFilePathByUri(getContext(), uri), new QRCodeAnalyzeUtils.AnalyzeCallback() {
        @Override
        public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
            ToastUtils.toast("解析结果:" + result, Toast.LENGTH_LONG);
        }
        @Override
        public void onAnalyzeFailed() {
            ToastUtils.toast("解析二维码失败", Toast.LENGTH_LONG);
        }
    });
}


自定义二维码扫描界面


(1)自定义一个扫码界面布局。自定义的扫码界面需要定义一个SurfaceView和一个ViewfinderView,且id必须是preview_viewviewfinder_view。详情见如下布局代码:


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <SurfaceView
        android:id="@+id/preview_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <com.xuexiang.xqrcode.view.ViewfinderView
        android:id="@+id/viewfinder_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:inner_corner_color="@color/scan_corner_color"
        app:inner_corner_length="30dp"
        app:inner_corner_width="5dp"
        app:inner_marginTop="120dp"
        app:inner_scan_bitmap="@mipmap/ic_scan_image"
        app:inner_scan_isCircle="false"
        app:inner_scan_speed="10"
        app:inner_height="300dp"
        app:inner_width="300dp" />
</FrameLayout>


ViewfinderView属性表


属性名 类型 默认值 备注
inner_width dimension 屏幕宽度的3/4 扫描框的宽度
inner_height dimension 屏幕宽度的3/4 扫描框的高度
inner_marginTop dimension 居中效果 扫描框距离顶部的距离
inner_corner_color color #0DC2FE 扫描框四角的颜色
inner_corner_length dimension 32dp 扫描框四角的长度
inner_corner_width dimension 6dp 扫描框四角的宽度
inner_scan_bitmap reference R.drawable.xqrcode_ic_scan_light 扫描控件图资源
inner_scan_bitmap_tint color / 扫描控件图资源的色调
inner_scan_speed dimension 5dp 扫描速度
inner_scan_animation_interval integer 25 扫描动画绘制的间期,单位是ms
inner_scan_isCircle boolean true 小圆点是否展示


(2)调用XQRCode.getCaptureFragment的方法,传入自定义扫描界面的布局ID,可以获得带扫描功能的Fragment-CaptureFragment,将其填充到页面中。


// 为二维码扫描界面设置定制化界面
CaptureFragment captureFragment = XQRCode.getCaptureFragment(R.layout.layout_custom_camera);
captureFragment.setAnalyzeCallback(analyzeCallback);
getChildFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();


(3)最后为CaptureFragment设置二维码解析回调接口AnalyzeCallback即可。


设置相机聚焦的间隔


//设置相机的自动聚焦间隔
XQRCode.setAutoFocusInterval(1500L);
复制代码


2.3、二维码生成


1.简单的二维码生成


调用XQRCode.createQRCodeWithLogo,传入二维码携带的内容、尺寸、图标即可生成二维码Bitmap。


2.复杂的二维码生成


调用XQRCode.newQRCodeBuilder可以获得二维码生成构建者。可设置的参数如下:


  • setContents: 设置二维码携带的内容


  • setSize: 设置二维码的尺寸


  • setMargin: 设置二维码的边缘宽度


  • setDataDotScale: 设置二维码的数据点缩放比例


  • setColorDark: 设置深色点(true-dots)色值


  • setColorLight: 设置浅色点(false-dots)色值


  • setBackgroundImage: 设置背景图案


  • setWhiteMargin: 设置是否是白色的边缘


  • setAutoColor: 设置是否自动从背景图案中选取色值


  • setBinarize: 设置是否(二值化)灰度化背景图案


  • setBinarizeThreshold: 设置二值化中值


最后调用build方法即可生成二维码。


2.4、二维码解析


1.只需要解析二维码携带的数据内容,可直接调用XQRCode.analyzeQRCode方法,传入二维码的绝对路径即可。


2.如果需要完整的二维码解析结果,可调用XQRCode.getAnalyzeQRCodeResult方法,传入二维码的绝对路径即可。


混淆配置


-dontwarn com.google.zxing.**
-keep class com.google.zxing.**{*;}





相关文章
|
6月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
100 4
|
2月前
|
数据采集 JavaScript API
网页解析库:BeautifulSoup与Cheerio的选择
网页解析库:BeautifulSoup与Cheerio的选择
|
2月前
|
JSON API 数据格式
二维码操作[二维码解析基础版]免费API接口教程
此接口用于解析标准二维码内容,支持通过BASE64编码或远程图片路径提交图片。请求需包含用户ID、用户KEY、图片方式及图片地址等参数,支持POST和GET方式。返回结果包括状态码和消息内容,适用于图片元素简单的二维码解析。
|
2月前
|
存储 Go PHP
Go语言中的加解密利器:go-crypto库全解析
在软件开发中,数据安全和隐私保护至关重要。`go-crypto` 是一个专为 Golang 设计的加密解密工具库,支持 AES 和 RSA 等加密算法,帮助开发者轻松实现数据的加密和解密,保障数据传输和存储的安全性。本文将详细介绍 `go-crypto` 的安装、特性及应用实例。
89 0
|
3月前
|
SQL Oracle 关系型数据库
SQL整库导出语录:全面解析与高效执行策略
在数据库管理和维护过程中,整库导出是一项常见的需求,无论是为了备份、迁移还是数据分析,掌握如何高效、准确地导出整个数据库至关重要
|
3月前
|
存储 文字识别 算法
解析!文档扫描 SDK 中的高级图像处理技术
本博客讨论了图像质量在文档扫描中的重要性,解决了扫描过程中遇到的常见挑战,以及文档扫描 SDK 利用先进的图像处理技术来应对这些挑战。
|
3月前
|
前端开发 JavaScript
pyquery:一个灵活方便的 HTML 解析库
pyquery:一个灵活方便的 HTML 解析库
30 1
|
4月前
|
XML JSON 网络协议
超级好用的C++实用库之字节流解析器
超级好用的C++实用库之字节流解析器
47 3
|
4月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
80 3
|
4月前
|
缓存 网络协议 分布式数据库
超级好用的C++实用库之DNS解析
超级好用的C++实用库之DNS解析
86 0

推荐镜像

更多