我正在尝试显示当前安装在手机上的所有输入法的列表。我通过这样做得到一个 InputMethodInfo 对象的列表:
InputMethodManager imeManager = (InputMethodManager)getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
List<InputMethodInfo> InputMethods = imeManager.getEnabledInputMethodList();
这可行,但 InputMethodInfo 对象在任何地方都没有友好的名称。例如,它会给我“com.swype.android.inputmethod.SwypeInputMethod”而不是“Swype”
这不是向用户显示列表的一种非常友好的方式,而且这些包名称不遵循严格的模式,因此我无法可靠地将键盘名称从类名中解析出来。
我什至试图变得非常花哨并获取 InputMethodInfo 的相应 ServiceInfo 对象,以便我可以解析它的 Label Resource 整数,但每次运行时我都会得到 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。