Android Kotlin 调用 ZXing 扫描二维码

文章目录

    要在 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式