Android Kotlin 调用 ZXing 扫描二维码

发布时间: 2024-04-09 15:02:09 作者: 大象笔记

要在 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

参考

我是一名山东烟台的开发者,联系作者