3

電話に現在インストールされているすべての入力方法のリストを表示しようとしています。これを行うことで、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。

4

1 に答える 1

8

それが私の鼻の下にあったとき、私はこれに多くの時間を無駄にしました. 他のことをしているときに、自分の質問に対する答えを発見しました。これにより、通常の InputMethodInfo オブジェクトを介してインプット メソッドのフレンドリ名が得られます。

inputMethodInfo.loadLabel(packageManager).toString();

私は、すべてがプロパティとして実装される C# の記述に慣れすぎているため、ほとんどの調査は、実行時にオブジェクト プロパティを調べて行いました。ただし、Java はこの種の情報のほとんどを public メソッドを介して提供します。Eclipse でオートコンプリート ボックスが表示されたときにたまたまそれに気付きました。

于 2010-11-18T00:00:31.213 に答える