Как мне инициировать какие-либо ключевые события в коде 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 Функция проверяет список всех клавиш, которые я хочу обработать.

Другие вопросы по тегам