3

ボタンをクリックして、EditText に Google Voice Typing IME を表示したいと考えています。したがって、この記事とソースコードによると、このコードを書く必要があります

inputMethodManager.setInputMethodAndSubtype(IBinder token, String id, InputMethodSubtype subtype)

問題は、適切なトークンを見つける場所です。ソースコードでこれを見ました

mInputMethodService.getWindow().getWindow().getAttributes().token

うまく機能しますが、このコードは InputMetodService スーパークラスにあるため、InputMethodService インスタンスにアクセスできます。しかし、私はしません (残念ながら :) )。

何か提案があれば教えてください。ありがとう。

機能しない: EditText.getWindowToken()

4

1 に答える 1

4

セキュリティ上の理由により、android ではアプリケーションが inputMethod タイプを変更することを許可していません。あなたが言及した記事は、カスタム実装された IME に google IME を統合するためのものであり、アプリケーションには適用されません。ここでInputMethodManagerのドキュメントを確認できます

クライアント アプリケーションは、ユーザーが新しい IME を選択できるようにシステムに要求できますが、プログラムでそれ自体に切り替えることはできませんこれにより、悪意のあるアプリケーションがユーザーを独自の IME に切り替えて、ユーザーが別のアプリケーションに移動しても実行されたままになるのを回避できます。一方、IME は、既にユーザー入力を完全に制御しているため、システムを別の IME にプログラムで切り替えることができます。

次のように、onClick コールバックで新しい IME に切り替えるようにユーザーに促すことができます。

InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showInputMethodPicker();
于 2013-06-13T10:35:42.160 に答える