Определите, включен метод ввода - PullRequest
1 голос
/ 24 августа 2011

В 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.

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

1 Ответ

2 голосов
/ 24 августа 2011

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

Android: определить метод активного ввода из кода

Следующий код ( updated ) сделал трюк:

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);
}
...