我有一个自定义 webview,我使用(通过contenteditable
)作为富文本编辑器。为了容纳一些东西,我也有一个自定义InputConnection
.
直到最近,这一直运行良好——我怀疑最近的 Android/WebView
更新。
我InputConnection
通过覆盖我WebView
的派生类来构造onCreateInputConnection
:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
InputConnection ic = super.onCreateInputConnection(outAttrs);
if (ic != null) {
InputConnection mic = new MyInputConnection(ic);
return mic;
}
return ic;
}
MyInputConnection
好像:
private class MyInputConnection implements InputConnection {
private InputConnection IC;
// Must be implemented (at least pre-Android-N)
@Override
public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) {
return IC.getExtractedText(request, flags);
}
...
}
这曾经很好用。但现在我得到:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.AssertionError
at org.chromium.content.browser.input.ImeUtils.checkCondition(ImeUtils.java:1)
at org.chromium.content.browser.input.ThreadedInputConnection.assertOnImeThread(ThreadedInputConnection.java:64)
at org.chromium.content.browser.input.ThreadedInputConnection.getExtractedText(ThreadedInputConnection.java:105)
at com.myapp.MyWebView$MyInputConnection.getExtractedText(MyWebView.java:106)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:326)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
所以它似乎不喜欢我的 InputConnection 正在运行的线程?即使它应该调用WebView
's original InputConnection
?
就像我说的,令人费解的部分是这几天前还在工作。(它现在至少在 Gboard 和 SwiftKey 上失败了,但奇怪的是,它似乎仍然像最初在 Hacker's Keyboard 上一样工作。)