簡體   English   中英

如何獲取手機上安裝的所有輸入法(及其名稱)的列表?

[英]How can I get a list of all the Input Methods (and their names) that are installed on the phone?

我正在嘗試顯示當前安裝在手機上的所有輸入法的列表。 我通過這樣做得到一個InputMethodInfo對象的列表:

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

這有效,但InputMethodInfo對象在任何地方都沒有友好名稱。 例如,它代替“Swype”,它會給我“com.swype.android.inputmethod.SwypeInputMethod”

這不是向用戶顯示列表的非常友好的方式,並且這些包名稱不遵循嚴格的模式,因此我無法可靠地從類名稱中解析鍵盤名稱。

我甚至試圖得到真正的幻想,並獲得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中彈出自動完成框時恰好注意到了這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM