我想通过单击按钮在我的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/

10-08 23:59