确定启用的输入法

时间:2011-08-24 06:14:43

标签: android input keyboard

在Android上,我想以编程方式检查我的应用程序提供的InputMethod是否为当前激活的输入法

目前,我使用了一个技巧:检测我的InputMethodService是否已启动。

public boolean isInputMethodEnabled() {
    ActivityManager activityManager = (ActivityManager).getSystemService(ACTIVITY_SERVICE);
    List<RunningServiceInfo> servicesInfo = activityManager.getRunningServices(Integer.MAX_VALUE);

    for (RunningServiceInfo serviceInfo : servicesInfo) {
        if (MyInputMethodService.class.getName().equals(serviceInfo.service.getClassName())) {
            return true;
        }
    }
    return false;
}

一般来说效果很好,但在应用更新时失败:我的输入法仍然被选中,但服务尚未启动。当第一次需要键盘时,服务将启动,直到那时 isInputMethodEnabled()将返回false。

所以我的问题是:你知道另一种方法来检查我的输入法是否被选中,或者你知道在更新后重新启动输入法服务的方法,而不必显示textview?

1 个答案:

答案 0 :(得分:1)

我在另一个Stack Overflow问题上找到了答案:

Android: Determine active input method from code

以下代码(已更新)可以解决问题:

public boolean isInputMethodEnabled() {
    String id = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);

    ComponentName defaultInputMethod = ComponentName.unflattenFromString(id);

    ComponentName myInputMethod = new ComponentName(mContext, MyInputMethodService.class);

    return myInputMethod.equals(defaultInputMethod);
}