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
相关产品推荐
相关产品推荐

