На 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.
Поэтому мой вопрос: знаете ли вы другой способ проверить, выбран ли мой метод ввода, или вы знаете способ перезапуска службы метода ввода после обновления, не имея необходимости отображать текстовое представление?
Я нашел ответ на другой вопрос о переполнении стека:
Android: определение активного метода ввода из кода
Следующий код (обновленный) сделал трюк:
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);
}