You need to enable JavaScript to run this app. Kotlin中onActivityResult已废弃,二维码扫描功能如何替换为StartActivityForResult?
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中onActivityResult已废弃,二维码扫描功能如何替换为StartActivityForResult?

解决方案

直接按照以下步骤调整代码即可:


1. 声明扫描结果启动器

作为Activity/Fragment的类成员变量声明,不能在方法内部初始化:

import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult

// 类成员变量
private val scanQrLauncher = registerForActivityResult(StartActivityForResult()) { result ->
    val parseResult = IntentIntegrator.parseActivityResult(result.resultCode, result.data)
    parseResult?.let {
        if (it.contents == null) {
            Toast.makeText(this, "Operación Cancelada", Toast.LENGTH_LONG).show()
        } else {
            resultado = it.contents.toString()
            getlist()
        }
    }
}

2. 修改扫描启动方法

调整原来的scanQRCode方法,使用启动器触发扫描:

private fun scanQRCode() {
    val integrator = IntentIntegrator(this).apply {
        captureActivity = CaptureActivity::class.java
        setOrientationLocked(false)
        setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES)
        setPrompt("Scanning Code")
    }
    // 生成官方合规的扫描意图,交给启动器启动,不要调用原来的initiateScan()
    val scanIntent = integrator.createScanIntent()
    scanQrLauncher.launch(scanIntent)
}

3. 删除废弃代码

直接删掉原来重写的onActivityResult方法即可,至此所有废弃警告消除,功能逻辑和之前完全一致。

之前的写法无法运行是因为你自行构造了启动Activity的Intent,没有使用ZXing的IntentIntegrator生成的合规扫描意图,导致结果无法正常解析。


内容的提问来源于stack exchange,提问作者Felipe Camacho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 21:12:03