Как определить текущий IME в Android?

У меня есть приложение, в котором я хотел бы предупредить пользователя, если он не использует стандартную программную клавиатуру Android. (т.е. они используют Swype или что-то еще).

Как проверить, какой метод ввода в данный момент выбран?

Ответы

Ответ 1

Вы можете получить IME по умолчанию, используйте:

Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);

Ответ 2

InputMethodManager имеет getEnabledInputMethodList(). Вы получаете InputMethodManager от getSystemService() в Activity.

Ответ 3

Здесь немного кода, который я использовал, чтобы определить, используется ли GoogleKeyboard, Samsung Keyboard или Swype Keyboard. Значение, возвращаемое отражением для mCurId, указывает идентификатор IME.

Протестируйте с помощью различных клавиатур/методов ввода, которые вы ищете, чтобы найти соответствующую

public boolean usingSamsungKeyboard(Context context){
    return usingKeyboard(context, "com.sec.android.inputmethod/.SamsungKeypad");
}

public boolean usingSwypeKeyboard(Context context){
    return usingKeyboard(context, "com.nuance.swype.input/.IME");
}

public boolean usingGoogleKeyboard(Context context){
    return usingKeyboard(context, "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME");
}   

public boolean usingKeyboard(Context context, String keyboardId)
    {
        final InputMethodManager richImm =
          (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);

        boolean isKeyboard = false;

        final Field field;
        try
        {
            field = richImm.getClass().getDeclaredField("mCurId");
            field.setAccessible(true);
            Object value = field.get(richImm);
            isKeyboard = value.equals(keyboardId);

        }
        catch (IllegalAccessException e)
        {

        }
        catch (NoSuchFieldException e)
        {

        }
        return  isKeyboard;
    }