2014-03-31 7 views
6

bereitstellen Ich muss Eingabe zu einem WebView-Eingabesteuerelement programmgesteuert bereitstellen. Dafür benutzte ich webView.dispatchKeyEvent() und es funktionierte gut bis Android 4.3 Version, aber es funktioniert nicht in Version 4.4 (Kitkat - Chromium WebView).Wie Eingabe zu einem WebView-Eingabefeld programmgesteuert in Android Kitkat (4.4)

Ich sehe die unten Aussagen im logcat:

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

Ich habe versucht, dispatchKeyEvent(), onKeyDown(), aber nichts funktioniert für Chromium webView in 4.4, bitte kann mir jemand mitteilen, wenn es eine ist Möglichkeit, Eingaben programmgesteuert an webView-Felder zu senden.

Bitte beachten Sie, dass ich nach einer generischen Lösung für jede Webseite suche (zB: Benutzername und Passwort in Facebook URL), wo ich den Namen/ID des Eingabesteuerelements nicht kenne Eingabe laden.

Antwort

4

Sie können hierfür die Klasse Instrumentation verwenden. Ich habe es mit Android 4.4 getestet und es funktioniert.

Zuerst sicherstellen, dass der WebView Fokus hat, dann rufen Sie sendCharacterSync() an, um einzelne Schlüsselereignisse zu senden. Beachten Sie, dass diese Aufrufe von einem Hintergrundthread durchgeführt werden müssen (dies ist obligatorisch).

Zum Beispiel:

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(); 

Das einzige Problem ist, dass Sie einen „Schreibmaschine“ Effekt zu erhalten (das heißt die Buchstaben erscheinen nacheinander, nicht alle auf einmal).

+1

Vielen Dank matiash, instrumentation.sendStringSync() arbeitete für mich. – Harish

Verwandte Themen