Android Kotlin 调用 ZXing 扫描二维码

更新日期: 2024-04-09 阅读次数: 514 字数: 344 分类: Android

要在 Android 平板上实现一个输入激活码激活的功能,但是激活码太长,40 个字符,太长不好输入。所以想通过生成二维码,然后扫描二维码,提取激活码的方案。

我看目前 Google 官方推荐使用 ML kit 来识别二维码,但是由于使用的是华为平板,担心依赖于 Google 服务的功能无法运行,所以使用了 ZXing 这个库。

下面是一个教程:

https://tutorialwing.com/implement-android-qr-code-scanner-using-zxing-library-in-kotlin/

参考这里面的 fragment 部分。

摄像头权限

<uses-permission android:name="android.permission.CAMERA" />

<uses-feature
    android:name="android.hardware.camera"
    android:required="false" />

依赖

implementation 'com.journeyapps:zxing-android-embedded:4.2.0'

fragment 中调用 ZXing 二维码扫描

private lateinit var qrScanIntegrator: IntentIntegrator

override fun onCreateView(
	inflater: LayoutInflater, container: ViewGroup?,
	savedInstanceState: Bundle?
): View {
	// ...

	setupScanner()

	// ...
}

private fun setupScanner() {  
    qrScanIntegrator = IntentIntegrator.forSupportFragment(this)  
    qrScanIntegrator.setOrientationLocked(false)  
}  

// 点击事件中调用
private fun performScan() {  
    // Code to perform action when button is clicked.  
    qrScanIntegrator.initiateScan()  
}  
  
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {  
    val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)  
    if (result != null) {  
        // If QRCode has no data.  
        if (result.contents == null) {  
            Toast.makeText(activity, "no data", Toast.LENGTH_LONG).show()  
        } else {  
            // If QRCode contains data.  
            Toast.makeText(activity, content, Toast.LENGTH_LONG).show()  
        }  
    } else {  
        super.onActivityResult(requestCode, resultCode, data)  
    }  
}

扫描页面的退出按钮

实际上是自定义 ZXing 的扫描界面:

java - How do I add buttons in Zxing Scanner Camera View? - Stack Overflow

参考

  • https://tutorialwing.com/implement-android-qr-code-scanner-using-zxing-library-in-kotlin/ 参考里面的 fragment 部分

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式