Я пытаюсь отобразить список всех методов ввода, которые в настоящее время установлены на телефоне.Я получаю список объектов InputMethodInfo, выполняя это:
InputMethodManager imeManager = (InputMethodManager)getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
List<InputMethodInfo> InputMethods = imeManager.getEnabledInputMethodList();
Это работает, но у объекта InputMethodInfo нигде нет понятного имени.Например, вместо «Swype» он выдаст мне «com.swype.android.inputmethod.SwypeInputMethod»
Это не очень удобный способ отображения списка для пользователя, и эти имена пакетов нене следовать строгому шаблону, поэтому у меня нет способа надежно разобрать имя клавиатуры по имени класса.
Я даже пытался по-настоящему выкрутиться и получить соответствующий объект ServiceInfo объекта InputMethodInfo, чтобы я мог разрешить его меткуРесурс целочисленный, но я просто получаю NameNotFoundExceptions каждый раз, когда это выполняется.
ComponentName componentName = inputMethodInfo.getComponent();
ServiceInfo serviceInfo = packageManager.getServiceInfo(componentName, 0);
Resources resources = getResources();
try
{
String imeServiceLabel = resources.getString(serviceInfo.labelRes);
}
catch (NameNotFoundException e) { }
Кто-нибудь знает, как этого добиться?Мне все равно, как я должен это сделать, мне просто нужно иметь возможность составить список методов ввода, которые появляются в меню «Язык» и «Клавиатура» телефона, и затем сохранить выбор пользователя.Я подумал, может быть, я мог бы просто использовать InputMethodManager, чтобы запустить стандартное меню выбора метода ввода, а затем посмотреть, какой пользователь выбрал, посмотрев, какой IME выбран в данный момент после закрытия меню, но насколько я могу судить, нет никакого способа увидетькакой IME в данный момент выбран в системе.