1

我扩展了 InputMethodService,希望使用此服务来显示软键盘,即使连接了硬键盘(基于以下帖子显示软键盘,即使连接了硬件键盘)。有没有办法在应用程序中绑定到此服务而无需在清单中声明它?最终结果是让 InputMethodService.onEvaluateInputViewShown 返回 true,这样即使连接了硬键盘,软键盘也会显示。

我想将扩展类 MultiInputMethodService 与 show/hideSoftKeyboard 中的 inputmethodmanager 一起使用:

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,然后才能切换到它,以向系统确认他们知道它并希望它可以使用。

于 2012-12-05T21:10:37.083 回答