Определите, включен метод ввода

1

На 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.

Поэтому мой вопрос: знаете ли вы другой способ проверить, выбран ли мой метод ввода, или вы знаете способ перезапуска службы метода ввода после обновления, не имея необходимости отображать текстовое представление?

Теги:
input
keyboard

1 ответ

1
Лучший ответ

Я нашел ответ на другой вопрос о переполнении стека:

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);
}
  • 3
    Это ужасно хрупко: верните «my.package / .MyInputMethodService» .equals (id). Используйте ComponentName, чтобы проанализировать значение DEFAULT_INPUT_METHOD и сравнить его с соответствующим образом инициализированным ComponentName для вашей службы.
  • 0
    Вы определенно правы !! Я обновил ответ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню