How to determine the current IME in Android?
You can get a default IME, use:
Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
InputMethodManager
has getEnabledInputMethodList()
. You get an InputMethodManager
from getSystemService()
in your Activity
.
Here's a bit of code I used to determine if GoogleKeyboard, Samsung Keyboard, or Swype Keyboard is used. The value returned by reflection for mCurId indicates the IME ID.
Test with the different keyboards/input methods you are looking for to find the relevant one
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; }