我想通过单击按钮在我的EditText上显示Google语音输入法IME。因此,根据this文章和source code我应该编写以下代码
inputMethodManager.setInputMethodAndSubtype(IBinder token, String id, InputMethodSubtype subtype)
问题是:在哪里可以找到合适的令牌。在源代码中,我看到了
mInputMethodService.getWindow().getWindow().getAttributes().token
它工作得很好,但是此代码位于InputMetodService超类中,因此可以访问InputMethodService实例。但是我没有(不幸的是:))。
如果您有任何建议,请告诉我。谢谢。
无效:EditText.getWindowToken()
最佳答案
出于安全原因,android不允许应用程序更改inputMethod类型。您提到的文章是有关将Google IME集成到自定义实现的IME中的,不适用于应用程序。
您可以查看InputMethodManager here的文档
客户端应用程序可以要求系统让用户选择一个新的IME,但不能以编程方式切换到一个自身。这样可以避免恶意应用程序将用户切换到他们自己的IME,当用户导航到另一个应用程序时,该IME仍在运行。另一方面,允许IME以编程方式将系统切换到另一个IME,因为它已经完全控制了用户输入。
您可以像这样在用户的onClick回调中提示用户切换到新的IME:
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showInputMethodPicker();
关于android - 在InputMethodService之外调用InputMethodManager.setInputMethod(IBinder token ,字符串ID)。在哪里可以找到代币?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15976837/