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