Как мне инициировать какие-либо ключевые события в коде Android?
Например, что мне делать, если я хочу, чтобы веб-страница получила событие со значением кода ключа - 1?
Я пытался использовать webview.dispatchKeyEvent(...)
, но если значение KeyEvent
не в константе, определенной KeyEvent.KEYCODE_XXX
конвертируется в keyEvent.KEYCODE_UNKNOWN
, То есть значение кода события, полученное на странице, равно 0.
Что я должен делать?
API 19
И то и другое Webview
а также Crosswalk
все в порядке.
1 ответ
В JavaScript добавьте две функции к объекту окна: keyDown
а также keyUp
, В java переопределите функцию dispatchKeyEvent в вашей основной деятельности:
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
final int keyCode = event.getKeyCode();
final int keyAction = event.getAction();
if (keyAction == KeyEvent.ACTION_DOWN)
loadUrl("javascript:keyDown(" + keyCode + ")");
else if (keyAction == KeyEvent.ACTION_UP)
loadUrl("javascript:keyUp(" + keyCode + ")");
return true;
}
Настройте эту функцию для обработки неподдерживаемых клавиш. Дело в том, что, прочитав ключ в java, вы можете вызывать пользовательские функции js, не передавая значение "0".
В моем случае я сделал:
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
final int keyCode = event.getKeyCode();
final int keyAction = event.getAction();
final boolean keySupported = KeyHelper.isKeySupported(keyCode);
if (keySupported)
{
if (keyAction == KeyEvent.ACTION_DOWN)
loadUrl("javascript:keyDown(" + keyCode + ")");
else if (keyAction == KeyEvent.ACTION_UP)
loadUrl("javascript:keyUp(" + keyCode + ")");
return true;
}
return super.dispatchKeyEvent(event);
}
где isKeySupported
Функция проверяет список всех клавиш, которые я хочу обработать.