Работает на Kotlin
WebView
с JS-интерфейсом, где моему веб-приложению требуется обнаружить событие KeyEvent.KEYCODE_BACK
с собственной стороны, чтобы закрыть диалоговое окно веб-приложения при его представлении.Если диалоговое окно закрыто, я ничего не должен делать на нативной стороне (вернуть true в super), в противном случае мне нужно завершить просмотр веб-страниц (вернуть false в super).Чтобы поймать мое намерение, пожалуйста, прочитайте приведенный ниже код, который я включил в свой пользовательский WebView
в качестве подсказки,
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
if (event.action == KeyEvent.ACTION_DOWN) {
when (keyCode) {
KeyEvent.KEYCODE_BACK -> {
this.evaluateJavascript("onDeviceBackPressed();", ValueCallback {
if (it == "1") {
// "Web app consumed onDeviceBackPressed event!"
} else {
// "Web app did not consume onDeviceBackPressed event!"
// super.onKeyDown(keyCode, event) won't work
}
})
// I am required to make the return call wait
// return true/false base on status returned by js func
}
}
}
return super.onKeyDown(keyCode, event)
}
Но я знаю, что невозможно ожидать супер-вызова асинхронно.Как мне справиться с этой ситуацией по-другому?