以编程方式切换键盘配置文件

Posted

技术标签:

【中文标题】以编程方式切换键盘配置文件【英文标题】:Switch keyboard profile programmatically 【发布时间】:2018-02-07 08:47:46 【问题描述】:

有什么方法可以让我们以编程方式切换已安装的键盘(无需手动进入设置部分)?

我的要求是向用户展示手机上安装的所有键盘并获得一个选择器对话框以切换到一个愿望?

(基本上我们想减少将他转移到设置页面的步骤)

【问题讨论】:

【参考方案1】:

这段代码将满足您的要求:

InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
imeManager.showInputMethodPicker();

正如 Commonsware 在他的回答中指出的那样,没有办法在用户背后这样做。

【讨论】:

同意 Commonsware 所说的,但我接受了你的回答,因为这是我用于用户体验研究的研究应用程序,它不会进入 Playstore(我应该在原始问题中提到)【参考方案2】:

如果你的应用有系统权限,并且有权限

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

您可以通过将其设为默认键盘以编程方式启用键盘并将其设置为当前键盘无需用户知识或干预!

//get the old default keyboard in case you want to use it later, or keep it enabled
String oldDefaultKeyboard = Settings.Secure.getString(resolver, Setting.Secure.DEFAULT_INPUT_METHOD);

//enable your keyboard
Settings.Secure.putString(resolver, Settings.Secure.ENABLED_INPUT_METHODS, "com.my.keyboard/.full.path");

//set your keyboard as the new default keyboard
Settings.Secure.putString(resolver, Settings.Secure.DEFAULT_INPUT_METHOD, "com.my.keyboard/.full.path");

您可以通过向ENABLED_INPUT_METHODS 提供键盘列表(以“:”分隔)来启用多个键盘(例如默认键盘和您自己的键盘)。见docs

您可以通过调用ime list -aadb shell 来验证键盘的完整包和路径ID

【讨论】:

我喜欢你的方法,它对具有系统权限的应用程序很有用。是否有任何类似的方法来更改 IME 子类型,例如从英语 UK 更改为 French?我正在尝试使用Settings.Secure.putInt(resolver, Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE, subTypeId),但首先我无法获取 subTypeId。从来源我可以看到它等于内部mSubtypeId,但据我所知,这并没有公开。 这个答案对我帮助很大。谢谢:) 你对“没有用户知识”的兴奋让我感觉有点不舒服 :) resolver = getContentResolver(),第二行的设置中也缺少一个“s”【参考方案3】:

如果您有 root 设备,您可以使用/system/bin/ime 实用程序。

列出所有已安装的输入法:# ime list -a

将谷歌的键盘设为默认:# ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

在 Java 端使用 Runtime.getRuntime().exec(...)。

【讨论】:

你应该在ime set ...之前运行ime enable ...【参考方案4】:

有什么方法可以让我们以编程方式切换已安装的键盘(无需转到设置部分)?

幸运的是,没有,出于安全原因。如果应用程序可以指定使用什么输入法编辑器,恶意软件会将输入法编辑器更改为他们的键盘记录器。

【讨论】:

我认为您误解了这个问题。 Rajankz 想知道是否有办法在已安装的键盘之间切换,而不是如何安装键盘。 好的。在这种情况下,您介意详细说明安全风险吗?这当然很烦人,但我看不出在批准的输入法之间切换有任何风险。 @Robert:在安装时没有“认可的输入法”之类的东西。唯一的“批准”出现在用户在“设置”中选择输入法的时间点。现在,谷歌是否有可能创建一个 Android API,允许在输入法之间切换并仍然显示该对话框,以一种恶意软件作者无法搞砸的方式?是的,虽然他们没有,我怀疑他们会。对于这类东西(同上设备管理应用程序),他们希望用户通过设置来对敏感项目进行单点控制。 使用“认可的输入法”我指的是用户在安装第三方输入法时会收到带有警告的对话框。确认警告后,第三方键盘将显示在输入法列表中。安装是安全风险所在,而不是选择输入法。无论如何,实际上有一个 API 允许应用程序向用户显示输入法列表。请参阅我对 rajankz 问题的回答。 @Robert:“我指的是用户在安装第三方输入法时会得到一个带有警告的对话”——安装时没有这样的警告,在至少现在不是。【参考方案5】:
import android.content.Intent;

import android.view.inputmethod.InputMethodManager;

// To enable keyboard

startActivity(new Intent("android.settings.INPUT_METHOD_SETTINGS"));

// To activate the keyboard

InputMethodManager imeManager = (InputMethodManager) 
getApplicationContext().getSystemService(INPUT_METHOD_SERVICE);
imeManager.showInputMethodPicker();

【讨论】:

以上是关于以编程方式切换键盘配置文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 中以编程方式获取当前的活动/默认环境配置文件?

如何在 Spring 中以编程方式获取当前的活动/默认环境配置文件?

Spring Boot 以编程方式设置配置文件

以编程方式验证 MDM 配置文件(配置)是不是已成功推送到 iOS 设备?

以编程方式加密 .NET 中的配置文件

以编程方式加载 Log4j2 配置文件