在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?
答案 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);
}