Ответ 1
Вы можете получить IME по умолчанию, используйте:
Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
У меня есть приложение, в котором я хотел бы предупредить пользователя, если он не использует стандартную программную клавиатуру Android. (т.е. они используют Swype или что-то еще).
Как проверить, какой метод ввода в данный момент выбран?
Вы можете получить IME по умолчанию, используйте:
Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
InputMethodManager
имеет getEnabledInputMethodList()
. Вы получаете InputMethodManager
от getSystemService()
в Activity
.
Здесь немного кода, который я использовал, чтобы определить, используется ли 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;
}