1

ハード キーボードが接続されている場合でも、このサービスを使用してソフト キーボードを表示することを望んで、InputMethodService を拡張しました (次の投稿ハードウェア キーボードが接続されているにもかかわらず、ソフト キーボードを表示する に基づく)。マニフェストで宣言することなく、アプリ内でこのサービスにバインドする方法はありますか? 最終的には、ハード キーボードが接続されていてもソフト キーボードが表示されるように、InputMethodService.onEvaluateInputViewShown が true を返すようにします。

show/hideSoftKeyboard の inputmethodmanager で拡張クラス MultiInputMethodService を使用したいと思います。

public class MultiInputMethodService extends InputMethodService {

        @Override
        public boolean onEvaluateInputViewShown () {
            Log.i("onEvaluateInputViewShow","onEvaluateInputViewShown");
             return true;
        }   
}

私の活動:

 private void showSoftKeyboard() {
        InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY );
    }

    private void hideSoftKeyboard() {
        InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(this.myInput.getEditText().getWindowToken(), 0);
    }
4

1 に答える 1

0

IMS フレームワークは、全体として使用する必要があります。あなたがキーボードになりたい場合、ユーザーは設定であなたをデフォルトのキーボードとして選択する必要があります。サービスに直接バインドしようとした場合、結果がどうなるかはわかりませんが、うまくいかないと思います。ユーザーにデフォルトのキーボードとして設定してもらうことで、すべてのアプリで自動的にキーボードとして使用されます。

もちろん、セキュリティ上の理由から、自分で設定することはできません。そうしないと、キーボードが設定をめぐって争うことになります。ユーザーは手動で設定する必要があります。

編集:あなたが参照しているドキュメントを見つけました(「セキュリティセクション」の下):

http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html

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

ユーザーは、新しい IME に切り替える前に、設定で明示的に新しい IME を有効にする必要があります。これにより、ユーザーが新しい IME について知っていて、使用できるようにしたいことをシステムに確認できます。

于 2012-12-05T21:10:37.083 に答える