Как программно ввести данные в поле ввода webView в Android Kitkat (4.4)

Мне нужно программно ввести ввод в элемент управления вводом веб-просмотра. Для этого я использовал webView.dispatchKeyEvent(), и он отлично работал до версии Android 4.3, но не работает в версии 4.4 (Kitkat - Chromium webView).

Я вижу следующие утверждения в logcat:

W/UnimplementedWebViewApi(9737): Unimplemented WebView method onKeyMultiple called from: android.webkit.WebView.onKeyMultiple(WebView.java:2179)

Я пробовал dispatchKeyEvent(), onKeyDown(), но ничего не работает для Chromium webView в 4.4, пожалуйста, дайте мне знать, есть ли способ программно отправлять ввод в поля webView.

Обратите внимание, что я ищу общее решение для любой веб-страницы (например, поля имени пользователя и пароля в URL-адресе Facebook), где я не знаю имя/идентификатор элемента управления вводом, поэтому не могу использовать простой метод Javascript для загрузки ввода.


person AndroidDev    schedule 31.03.2014    source источник


Ответы (1)


Для этого можно использовать класс Instrumentation. Я тестировал его с Android 4.4, и он работает.

Сначала убедитесь, что WebView имеет фокус, а затем вызовите sendCharacterSync() для отправки отдельных ключевых событий. Обратите внимание, что эти вызовы должны выполняться из фонового потока (это обязательно).

Например:

final Instrumentation instrumentation = new Instrumentation();

new Thread(new Runnable()
{
    @Override
    public void run()
    {
        instrumentation.sendCharacterSync(KeyEvent.KEYCODE_H);
        instrumentation.sendCharacterSync(KeyEvent.KEYCODE_I);
        instrumentation.sendCharacterSync(KeyEvent.KEYCODE_TAB);
        instrumentation.sendCharacterSync(KeyEvent.KEYCODE_T);
        instrumentation.sendCharacterSync(KeyEvent.KEYCODE_H);
        instrumentation.sendCharacterSync(KeyEvent.KEYCODE_E);
        instrumentation.sendCharacterSync(KeyEvent.KEYCODE_R);
        instrumentation.sendCharacterSync(KeyEvent.KEYCODE_E);
    }
}).start();

Единственная проблема заключается в том, что вы получаете эффект «пишущей машинки» (т.е. буквы появляются одна за другой, а не все сразу).

person matiash    schedule 30.06.2014
comment
Спасибо, матиаш, у меня сработало toolsation.sendStringSync(). - person AndroidDev; 01.07.2014