如何获取手机上安装的所有输入法(及其名称)的列表?

2024-03-14

我正在尝试显示手机上当前安装的所有输入法的列表。我通过这样做获得了 InputMethodInfo 对象的列表:

InputMethodManager imeManager = (InputMethodManager)getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
List<InputMethodInfo> InputMethods = imeManager.getEnabledInputMethodList();

这是可行的,但是 InputMethodInfo 对象在任何地方都没有友好的名称。例如,它会给我“com.swype.android.inputmethod.SwypeInputMethod”,而不是“Swype”

这不是一种向用户显示列表的非常友好的方式,并且这些包名称不遵循严格的模式,因此我无法可靠地从类名称中解析出键盘名称。

我什至试图变得非常奇特并获取 InputMethodInfo 相应的 ServiceInfo 对象,以便我可以解析其标签资源整数,但每次运行时我只是得到 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。


当它就在我眼皮子底下时,我在这上面浪费了很多时间。我在做其他事情时发现了自己问题的答案。这将通过常规的 InputMethodInfo 对象为您提供输入方法的友好名称。

inputMethodInfo.loadLabel(packageManager).toString();

我太习惯于编写 C#,其中所有内容都作为属性实现,因此我通过在运行时查看对象属性来完成大部分调查。然而,Java 通过公共方法提供了大部分此类信息,我只是在 Eclipse 中弹出自动完成框时才注意到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取手机上安装的所有输入法(及其名称)的列表? 的相关文章

随机推荐