Как получить текущий язык клавиатуры?

Я должен получить текущий выбранный язык клавиатуры в Android. Пока я использую это:

 InputMethodManager imm = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();

    if(ims != null)
    {
        String lName = ims.getLocale();
        Locale locale = new Locale(lName);
        String lang = locale.getLanguage();
    }

но клавиатура Samsung и клавиатура Swiftkey всегда возвращают язык устройства, а не выбранный язык клавиатуры. И на Swiftkey, когда язык устройства отличается от английского, он возвращает что-то подобное для всех языков:

"it_it", "ru_ru", "bg_bg"

Как правильно выбрать текущий язык клавиатуры?

1 ответ

Минимальное API должно быть 11 для getEnabledInputMethodSubtypeList сейчас. Вот что я сделал, чтобы получить доступные языки ввода:

 private void printInputLanguages() {
    InputMethodManager imm = (InputMethodManager)   
    getSystemService(Context.INPUT_METHOD_SERVICE);
    List<InputMethodInfo> ims = imm.getEnabledInputMethodList();

    for (InputMethodInfo method : ims){
        List<InputMethodSubtype> submethods = 
        imm.getEnabledInputMethodSubtypeList(method, true);
        for (InputMethodSubtype submethod : submethods){
         if (submethod.getMode().equals("keyboard")){
             String currentLocale = submethod.getLocale();
             Log.i(TAG, "Available input method locale: " + currentLocale);
          }
       }
    }
 }
Другие вопросы по тегам