[英]Zxing QR code scanner code is not working in a fragment
我正在尝试使用 Kotlin 中的 Zxing 库开发二维码扫描仪应用程序。 我可以打开相机并扫描二维码,但没有得到响应。
我也尝试过本教程的实施,但没有得到帮助。
class HomeFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_home, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val mScanner = IntentIntegrator(activity)
mScanner.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)
mScanner.setBeepEnabled(true)
mScanner.initiateScan()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
if (result != null) {
if (result.contents == null) {
Toast.makeText(activity, "Cancelled", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(activity, "Scanned: " + result.contents, Toast.LENGTH_LONG).show()
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
}
我想在吐司中得到响应,但是当我尝试使用调试器时,我无法转到 onActivityResult() 并且相机很快关闭。
您的片段未请求活动结果。 当您使用IntentIntegrator(activity)
实例化IntentIntegrator(activity)
时,它将运行activity.startActivityForResult(intent, REQUEST_CODE)
。 因此,您不会在片段中收到结果。
如果您仍在使用android.app.Fragment
,则只需确保使用您的片段来实例化IntentIntegrator(this@HomeFragment)
。 像这样,您将在片段中获得结果,因为它将在内部运行fragment.startActivityForResult(intent, REQUEST_CODE)
。
如果您使用的是androidx.fragment.app.Fragment
,则可能需要将IntentIntegrator
的源复制到您的应用中,并调整代码以使用AndroidX片段而不是框架类型。
问题是,扫描仪将信息发送到您的活动的 onActivityResult 方法,而不是您的片段方法。 因此,可能的解决方案可能是在您的片段中将“this”作为上下文传递,而不是将您的活动作为上下文传递。 就像在你的片段中
val mScanner = IntentIntegrator(this); // pass fragment context
在片段中,无论您在哪里初始化扫描器,都将片段作为上下文传递,而不是将活动作为上下文传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.