Котлин, onActivityResult устарел сканирование QR-кода, любые идеи

#kotlin #deprecated #onactivityresult

Вопрос:

«onActivityResult» устарел, я не знаю, как заменить на «startActivityForResult» любые идеи, пожалуйста, помогите, это мой код:

мой код работает нормально, но показывает мне предупреждение об устаревшем методе

это мой код функции QrScan:

     private fun scanQRCode() {
    val integrator = IntentIntegrator(this).apply {
        captureActivity = CaptureActivity::class.java
        setOrientationLocked(false)
        setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES)
        setPrompt("Scanning Code")
    }
    integrator.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(this, "Operación Cancelada", Toast.LENGTH_LONG).show()
        else {
            resultado = result.contents.toString()
          getlist()
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data)
    }
}
 

Я попробовал этот новый способ, но он не работает
новый способ в Котлине:

 var resultLauncher = registerForActivityResult(StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        // There are no request codes
        val data: Intent? = result.data
        doSomeOperations()
    }
}

fun openSomeActivityForResult() {
    val intent = Intent(this, SomeActivity::class.java)
    resultLauncher.launch(intent)
}
 

Ответ №1:

Метод initiateScan() вызывает другой метод, называемый createScanIntent (), который возвращает намерение, необходимое для работы resultLauncher. Таким образом:

 private fun scanQRCode() {
    val integrator = IntentIntegrator(this).apply {
        captureActivity = CaptureActivity::class.java
        setOrientationLocked(false)
        setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES)
        setPrompt("Scanning Code")
    }
    resultLauncher.launch(integrator.createScanIntent())
}
 

Замена integrator.initiateScan() на resultLauncher.запуск (integrator.createScanIntent()) получает доступ к результату resultLauncher