要在 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 聊聊, 查看更多联系方式