2014-03-31 4 views
6

프로그래밍 방식으로 입력을 webview 입력 컨트롤에 제공해야합니다. 그 때문에 webView.dispatchKeyEvent()를 사용하고 있었고 Android 4.3 버전까지 제대로 작동했지만 4.4 버전 (Kitkat - Chromium webView)에서는 작동하지 않습니다.Android에서 프로그래밍 방식으로 WebView 입력 필드에 입력을 제공하는 방법 Kitkat (4.4)

는 내가 로그 캣에 아래 문을 참조하십시오이있는 경우

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

내가 dispatchKeyEvent에(), onKeyDown에()를 시도했지만 아무것도 4.4에 크롬 웹보기 위해 일하지, 누군가가 알려 드리겠습니다 프로그래밍 방식으로 WebView 필드에 입력을 보내는 방법.

입력 컨트롤의 이름/ID를 알지 못하는 모든 웹 페이지 (예 : Facebook URL의 사용자 이름 및 비밀번호 입력란)에 대한 일반 솔루션을 찾고 있으므로 간단한 자바 스크립트 메소드를 사용하십시오. 로드 입력.

답변

4

이 경우 Instrumentation 클래스를 사용할 수 있습니다. 나는 안드로이드 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(); 

유일한 문제는 당신이 "타자기"효과를 얻을 수 있다는 점이다 (즉 글자 하나 하나, 모든 한 번에 표시).

+1

감사합니다. matiash, instrumentation.sendStringSync()가 도움이되었습니다. – Harish