Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to determine the current IME in Android?

I have an application where I would like to warn the user if they are not using the default Android softkeyboard. (i.e. they are using Swype or some thing else).

How can I check which input method they currently have selected?

like image 650
jkhouw1 Avatar asked Apr 30 '10 13:04

jkhouw1


3 Answers

You can get a default IME, use:

Settings.Secure.getString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
like image 86
user302617 Avatar answered Nov 14 '22 01:11

user302617


InputMethodManager has getEnabledInputMethodList(). You get an InputMethodManager from getSystemService() in your Activity.

like image 45
CommonsWare Avatar answered Nov 14 '22 01:11

CommonsWare


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;
    }
like image 2
Chris Sprague Avatar answered Nov 14 '22 03:11

Chris Sprague