1

我有一个自定义 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 上一样工作。)

4

0 回答 0