android - 如何在没有辅助功能权限的情况下检测输入法选择器的可见性

标签 android android-activity service dialog android-input-method

我正在向用户展示输入法选择器,然后选择器弹出:

InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

im.showInputMethodPicker();

现在,如果用户关闭了选择器(例如通过单击选择器外部),我想知道这是否发生并执行一些操作(例如显示通知)。

我知道在一个 Activity 中我可以用肮脏的方式检查根布局的焦点,并且我知道通过 Accessibility 权限我可以检查该系统对话框是否获得焦点。

问题是我正在运行一项服务,我需要检测 IME 选择器是否显示,即使我不在我的应用程序中(例如第三方应用程序,甚至是 Android 键盘设置),而且我发现 Accessibility 权限对用户来说有点困惑,因此我宁愿不诉诸于此并找到替代方法。

还有其他方法吗?

最佳答案

这应该是评论,但我还不能评论。

您可以使用 xposed 来实现这一点,但这需要 Root设备,我猜这不在讨论范围内。

这是无障碍 api 的用途。你已经说过你不想使用肮脏的方式,所以我建议你只使用说的 api。

出于安全考虑,不应该有办法做到这一点(并且不是 afaik)。

关于android - 如何在没有辅助功能权限的情况下检测输入法选择器的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966135/

相关文章:

android - 在添加内容之前必须调用 requestFeature()

android - 如何修复android中的 `Type mismatch: cannot convert from android.app.FragmentManager to android.support.v4.app.FragmentManager`错误?

java - 尽管没有对代码进行任何更改,但 MainActivity 不再从 startActivity(i) 启动

android - Drupal 和 Android 之间的 session 和文件上传

android - 在 list 中禁用 Android 服务的目的是什么?

android - 谷歌眼镜交互声音

java - 清除 GridView 中的所有选定项目

java - 拍照后显示 fragment

android - 在 Activity 之间保留 fragment 状态

azure - 以编程方式更新 Azure 云服务的 cscfg