使用 GmsBarcodeScanning 管理扫描的条形码

问题描述 投票:0回答:1

我有一个带有 EditText 和几个按钮的片段。

其中一个按钮允许用户使用 GmsBarcodeScanning 库扫描条形码。

如果成功,扫描的条形码应该出现在 EditText 中,但我无法让它工作。

问题似乎是在 onSuccessListener() 之后执行 onCreateView() ,因此所有组件都被重置。

我认为这一定很简单,但我花了几个小时却找不到解决方案。

SelecComanda 类:Fragment() {

private var et_codi: EditText? = null
private var btn_scan: Button? = null
private var btn_next: Button? = null

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val root = inflater.inflate(R.layout.selec_comanda, container, false)
    et_codi = root.findViewById(R.id.editTextCodi)
    btn_scan = root.findViewById(R.id.boto_scan)
    btn_next = root.findViewById(R.id.button_second)
    return root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    btn_next!!.isEnabled = false

    btn_next!!.setOnClickListener {
        // TODO
    }

    btn_scan!!.setOnClickListener {
        val options = GmsBarcodeScannerOptions.Builder()
            .enableAutoZoom()
            .build()
        val scanner = GmsBarcodeScanning.getClient(this.context!!, options)

        scanner.startScan()
            .addOnSuccessListener { barcode ->
                et_codi!!.setText(barcode.rawValue.toString())
                btn_next!!.setEnabled(true)
        }
        .addOnCanceledListener {
            // TODO
        }
        .addOnFailureListener { e ->
            // TODO
        }
    }
}

}

如何恢复扫描的条形码并放入EditText?

android android-fragments barcode-scanner
1个回答
0
投票

你可以尝试下面的代码吗

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val gmsScannerOptions = configureScannerOption()
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val instance = getBarcodeScannerInstance(gmsScannerOptions)
    btn_scan!!.setOnClickListener {
        initiateScanner(instance)
    }
}

private fun configureScannerOption(): GmsBarcodeScannerOptions {
    return GmsBarcodeScannerOptions.Builder()
        .setBarcodeFormats(
            Barcode.FORMAT_QR_CODE,
            Barcode.FORMAT_AZTEC
        )
        .build()
}

private fun getBarcodeScannerInstance(gmsBarcodeScannerOptions: GmsBarcodeScannerOptions): GmsBarcodeScanner {
    return GmsBarcodeScanning.getClient(this, gmsBarcodeScannerOptions)
// Or with a configured options
// val scanner = GmsBarcodeScanning.getClient(this, options)
}

private fun initiateScanner(gmsBarcodeScanner: GmsBarcodeScanner) {
    gmsBarcodeScanner.startScan()
        .addOnSuccessListener { barcode ->
            // Task completed successfully
            val result = barcode.rawValue
            Log.d(TAG, "initiateScanner: $result")

            when (barcode.valueType) {
                Barcode.TYPE_URL -> {
                    Log.d(TAG, "initiateScanner: ${barcode.valueType}")
                }

                else -> {
                    Log.d(TAG, "initiateScanner: ${barcode.valueType}")
                }
            }

            Log.d(TAG, "initiateScanner: Display value ${barcode.displayValue}")
            Log.d(TAG, "initiateScanner: Display value ${barcode.format}")
        }
        .addOnCanceledListener {
            // Task canceled
        }
        .addOnFailureListener { e ->
            // Task failed with an exception
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.