yutils / QrCodeLib

一行代码实现相机扫码,二维码生成,简单易用

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

QrCodeLib

在原版上优化如下

1.谷歌api升级到com.google.zxing:core:3.5.2 2.开发sdk升级到34(安卓14) 3.简化使用,新增QRCodeUtil工具类 4.一行代码实现相机扫码解析 5.一行代码实现选择照片并解析 6.一行代码解析bitmap 7.扩张生成二维码的样式和风格,可以在二维码中插入图片

致谢

引入

项目工程gradle中添加 当前最新版:————> 1.0.1 最新版

implementation 'com.kotlinx:zxing-lib:1.0.1'

扫描二维码

//获取权限后打开摄像头扫码
QRCodeUtil.openCamera(activity) {
    binding.tvResult.text = it //扫到二维码后解析结果
}

//选择照片并解析二维码
QRCodeUtil.openAlbum(activity) {
    binding.tvResult.text = it //选照片后解析结果
}

//生成二维码
var bitmap = QrCodeGenerator.getQrCodeImage("二维码内容", 512, 512)
//或者
var bitmap = QRCodeUtil.encode("二维码内容", 512, 512, "UTF-8", "H", "0", Color.BLACK, Color.WHITE, null, 0F, null)

//解析图片中的二维码
val value = QRCodeUtil.decode(bitmap)?.text

注:开摄像头扫码AndroidManifest中需要添加

也可以自己申请权限后再扫码(不推荐)

//举例:获取相机权限后扫码
activityResultRegistry.register("相机权限", ActivityResultContracts.RequestPermission()) {
    //没有相机权限
    if (!it) return@register Toast.makeText(this, "请打开相机权限", Toast.LENGTH_SHORT).show()
    //监听扫码页面返回
    activityResultRegistry.register("跳转", ActivityResultContracts.StartActivityForResult()) { result ->
        if (result?.resultCode != Activity.RESULT_OK) return@register //没有扫描到二维码
        val scanResult = result.data?.extras?.getString(com.google.zxing.util.Constant.INTENT_EXTRA_KEY_QR_SCAN)
        //扫码结果
        binding.tvResult.text = scanResult
    }.run { launch(Intent(this@MainActivity, CaptureActivity::class.java)) }
}.run { launch(Manifest.permission.CAMERA) }


//举例:扫码相册中二维码
activityResultRegistry.register("打开手机中的相册", ActivityResultContracts.StartActivityForResult()) { result ->
    if (result?.resultCode != Activity.RESULT_OK) return@register //没有选择照片
    val uri: Uri? = result.data?.data
    val bitmap = BitmapUtil.decodeUri(this, uri, 500, 500)
    val result = QRCodeUtil.decode(bitmap)
    if (result == null) {
        binding.tvResult.text = ""
        return@register Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show()
    }
    //扫码结果
    binding.tvResult.text = result.text
}.run { launch(Intent(Intent.ACTION_GET_CONTENT).apply { type = "image/*" }) }

About

一行代码实现相机扫码,二维码生成,简单易用

License:MIT License


Languages

Language:Java 90.5%Language:Kotlin 9.5%