You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用code-scanner扫码时如何从Firestore获取数据并跳转至其他页面

实现方案

实现步骤

  • 确保项目已完成Firebase集成,添加Firestore依赖并完成初始化配置
  • 在扫码成功回调DecodeCallback中获取扫描得到的条码值,作为查询条件访问Firestore对应集合
  • 监听Firestore查询结果,查询成功后携带数据跳转至目标页面,按需添加查询失败、无匹配数据的处理逻辑

完整修改后代码

private fun codeScanner() {
    codeScanner = CodeScanner(this, scanner_view)
    // 初始化Firestore实例
    val firestore = FirebaseFirestore.getInstance()

    codeScanner.apply {
        camera = CodeScanner.CAMERA_BACK 
        formats = CodeScanner.ONE_DIMENSIONAL_FORMATS 
        autoFocusMode = AutoFocusMode.SAFE 
        isAutoFocusEnabled = true 
        isFlashEnabled = false 

        decodeCallback = DecodeCallback { scanResult ->
            val scannedBarcode = scanResult.text
            runOnUiThread {
                tv_textView.text = scannedBarcode
            }
            // Firestore查询逻辑,集合名、字段名需替换为你实际的结构
            firestore.collection("你的集合名称")
                .whereEqualTo("条码对应的字段名", scannedBarcode)
                .get()
                .addOnSuccessListener { querySnapshot ->
                    if (!querySnapshot.isEmpty) {
                        // 取第一条匹配的文档数据
                        val targetDoc = querySnapshot.documents.first()
                        val queryData = targetDoc.data
                        // 跳转至目标页面,替换为你实际的目标Activity类名
                        val intent = Intent(this@你当前的Activity类名, 目标Activity::class.java)
                        // 携带数据,复杂对象可转Json或实现Parcelable传递
                        intent.putExtra("query_result", queryData.toString())
                        startActivity(intent)
                        // 可选:跳转后关闭当前扫码页面
                        finish()
                    } else {
                        // 无匹配数据处理
                        runOnUiThread {
                            Toast.makeText(this@你当前的Activity类名, "未找到对应条码数据", Toast.LENGTH_SHORT).show()
                            codeScanner.startPreview()
                        }
                    }
                }
                .addOnFailureListener { e ->
                    // 查询失败处理
                    runOnUiThread {
                        Log.e("Firestore", "查询失败:${e.message}")
                        Toast.makeText(this@你当前的Activity类名, "数据查询失败,请重试", Toast.LENGTH_SHORT).show()
                    }
                }
        }

        errorCallback = ErrorCallback {
            runOnUiThread {
                Log.e("Scan", "相机初始化错误:${it.message}")
            }
        }
    }

    scanner_view.setOnClickListener {
        codeScanner.startPreview()
    }
}

注意事项

  • 代码中的占位符你的集合名称、条码对应的字段名、你当前的Activity类名、目标Activity需要替换为你项目中实际的内容
  • 如果需要传递复杂数据到目标页,建议将数据转为Json字符串或者让实体类实现Parcelable接口后传递
  • 请确保Firestore安全规则已开放对应集合的查询权限,避免权限不足导致查询失败
  • 可根据业务需求调整扫描成功后是否停止扫码预览,以及异常场景的处理逻辑

内容的提问来源于stack exchange,提问作者Barcode Payment System

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:36:10