電話に現在インストールされているすべての入力方法のリストを表示しようとしています。これを行うことで、InputMethodInfo オブジェクトのリストを取得しています。
InputMethodManager imeManager = (InputMethodManager)getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
List<InputMethodInfo> InputMethods = imeManager.getEnabledInputMethodList();
これは機能しますが、InputMethodInfo オブジェクトにはフレンドリ名がどこにもありません。たとえば、「Swype」の代わりに「com.swype.android.inputmethod.SwypeInputMethod」が表示されます
これは、リストをユーザーに表示するためのあまり友好的な方法ではありません。また、これらのパッケージ名は厳密なパターンに従っていないため、クラス名からキーボード名を確実に解析する方法がありません。
私は本当に凝って、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。