使用输入法服务的子类

时间:2012-12-05 20:35:48

标签: android

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

我想在show / hideSoftKeyboard中使用扩展类MultiInputMethodService和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);
    }

1 个答案:

答案 0 :(得分:0)

IMS框架确实需要作为一个整体使用。如果您想成为键盘,用户需要通过设置选择您作为默认键盘。如果你试图直接绑定服务,我不确定结果会是什么,但我的猜测是结果很糟糕。通过让用户将您设置为默认键盘,您将自动用作所有应用程序中的键盘。

当然,出于安全考虑,您不能自己设置。否则键盘会争夺设置。用户必须手动设置。

编辑: 我找到了你所指的文件(在“安全部分”下):

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

  

客户端应用程序可以要求系统让用户选择新的   IME,但不能以编程方式切换到一个本身。这避免了   恶意应用程序从用户切换到自己的IME,其中   当用户导航到另一个应用程序时,它仍然在运行。   另一方面,允许IME以编程方式切换   系统到另一个IME,因为它已经完全控制了用户   输入

     

用户必须先在设置中明确启用新的IME   切换到它,与系统确认他们知道它和   想让它可以使用。