XmlPullParserException:元数据不以输入法标签开头(Android 自定义键盘)

问题描述 投票:0回答:1

在处理另一个项目时,我注意到我之前制作的测试键盘在 logcat 中弹出了一个异常(基于这个答案的“继续”部分)。它安装在我的手机上,但它不是我当前正在运行的项目。

XmlPullParserException:元数据不以输入法标记开头

我重新测试了键盘,它仍然可以工作,所以这似乎不是一个大问题。不过,如果可以的话,我不喜欢留下错误。

我找不到与此相关的任何其他问题,但我确实找到了在InputMethodInfo

源代码中调用它的位置:

String nodeName = parser.getName();
if (!"input-method".equals(nodeName)) {
    throw new XmlPullParserException(
            "Meta-data does not start with input-method tag");
}

什么会导致此错误发生?

补充代码

输入法服务

public class WodeInputMethodService extends InputMethodService implements ImeContainer.OnSystemImeListener {

    @Override
    public View onCreateInputView() {
        LayoutInflater inflater = getLayoutInflater();
        ImeContainer jianpan = (ImeContainer) inflater.inflate(R.layout.jianpan_yangshi,
                null, false);
        jianpan.showSystemKeyboardsOption("ᠰᠢᠰᠲ᠋ᠧᠮ");
        jianpan.setOnSystemImeListener(this);

        return jianpan;
    }

    @Override
    public InputConnection getInputConnection() {
        return getCurrentInputConnection();
    }

    @Override
    public void onChooseNewSystemKeyboard() {
        InputMethodManager im = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        if (im == null) return;
        im.showInputMethodPicker();
    }
}

该错误可能隐藏得比这更深(例如在自定义键盘视图或它继承的库键盘中),但由于涉及的代码量,我首先问一个基本问题。如果我找到答案或更相关的代码,我将发布更新。

堆栈跟踪

04-26 10:30:13.466 855-880/? A/InputMethodManagerService: Unable to load input method ComponentInfo{net.studymongolian.jianpan/net.studymongolian.jianpan.WodeInputMethodService}
    org.xmlpull.v1.XmlPullParserException: Meta-data does not start with input-method tag
        at android.view.inputmethod.InputMethodInfo.<init>(InputMethodInfo.java:162)
        at com.android.server.InputMethodManagerService.buildInputMethodListLocked(InputMethodManagerService.java:2732)
        at com.android.server.InputMethodManagerService$MyPackageMonitor.onSomePackagesChanged(InputMethodManagerService.java:554)
        at com.android.internal.content.PackageMonitor.onReceive(PackageMonitor.java:402)
        at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:863)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.os.HandlerThread.run(HandlerThread.java:61)

注释

不幸的是,这不是 MCVE 问题,因为我无法重现该问题。我也不知道导致问题的代码的确切部分。不过,我仍在问这个问题,因为熟悉该错误的人可以描述导致该错误的具体情况。

android custom-keyboard android-input-method
1个回答
0
投票

我遇到了同样的问题,正确的方法是在 method.xml 中有一个“subtype”关键字,但它必须是 xml 中的第一个元素:在“subclass”或“settings”之前。

<input-method xmlns:android="http://schemas.android.com/apk/res/android">

  <subtype android:label="French (FR)"
    android:imeSubtypeLocale="fr_FR"
    android:imeSubtypeMode="keyboard" />

  <!-- Specify the class name of the custom keyboard -->
  <subclass android:name=".MyKeyboard" />

  <!-- Specify the settings activity (optional) -->
  <settings android:activity="com.example.customkeyboard.KeyboardSettingsActivity" />

</input-method>
© www.soinside.com 2019 - 2024. All rights reserved.