Определить, включен ли голосовой ввод

Мне нужно отобразить предупреждение для пользователя, если он не включил голосовой ввод Google в своих настройках (Язык и ввод -> Голосовой ввод Google). Есть ли способ определить этот статус настройки?


person Krasimir Unarev    schedule 31.08.2015    source источник


Ответы (2)


Итак, я нашел свой ответ. Официального способа определить, включен ли голосовой ввод, не существует. Мне удалось получить список включенных методов ввода (клавиатура, голос и т.д.).

String enabledMethods = Settings.Secure.getString(getActivity().getContentResolver(),Settings.Secure.ENABLED_INPUT_METHODS);

Там мы можем увидеть, включен ли голосовой набор Google или нет, и мы можем предупредить пользователя о его включении, однако это относится к клавиатуре по умолчанию. Некоторые пользователи используют специальные клавиатуры, которые имеют собственную реализацию преобразования речи в текст и не зависят от пользовательских настроек для голосового набора Google. Так что для них это будет ложным срабатыванием.

person Krasimir Unarev    schedule 01.09.2015
comment
эта команда Красимира возвращает com.sec.android.inputmethod/.SamsungKeypad:com.google.android.googlequicksearchbox/com.google.android.voicesearch.ime.VoiceInputMethodService. Вы можете проверить, содержит ли строка %voice%... - person Al2x; 14.04.2017

Зная, что вы знаете имя пакета IME, вы можете сделать что-то вроде этого:

boolean isImeEnabled(String packageName) {
    InputMethodManager imm =
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

    for (InputMethodInfo imi : imm.getEnabledInputMethodList()) {
        if (imi.getPackageName().equals(packageName)) {
            return true;
        }
    }

    return false;
}
person Kaarel    schedule 02.09.2015