#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