我扩展了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);
}
答案 0 :(得分:0)
IMS框架确实需要作为一个整体使用。如果您想成为键盘,用户需要通过设置选择您作为默认键盘。如果你试图直接绑定服务,我不确定结果会是什么,但我的猜测是结果很糟糕。通过让用户将您设置为默认键盘,您将自动用作所有应用程序中的键盘。
当然,出于安全考虑,您不能自己设置。否则键盘会争夺设置。用户必须手动设置。
编辑: 我找到了你所指的文件(在“安全部分”下):
http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html
客户端应用程序可以要求系统让用户选择新的 IME,但不能以编程方式切换到一个本身。这避免了 恶意应用程序从用户切换到自己的IME,其中 当用户导航到另一个应用程序时,它仍然在运行。 另一方面,允许IME以编程方式切换 系统到另一个IME,因为它已经完全控制了用户 输入
用户必须先在设置中明确启用新的IME 切换到它,与系统确认他们知道它和 想让它可以使用。