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

Posted

技术标签:

【中文标题】如何在没有辅助功能权限的情况下检测输入法选择器的可见性【英文标题】:How to detect the Input Method Picker visibility without the Accessibility permission 【发布时间】:2015-07-10 01:28:16 【问题描述】:

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

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

im.showInputMethodPicker();

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

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

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

还有其他方法吗?

【问题讨论】:

我当然希望这在使用无障碍 API 之外是不可能的。应用不应以其他方式窥探前台 UI。 @CommonsWare 另一方面,虽然我们可以相当容易地确定哪个应用程序正在前台运行。因此,我认为也许有办法。 “另一方面,虽然我们可以相当容易地确定哪个应用程序在前台运行”——在 5.0+ 上并不那么容易,我正在与谷歌合作关闭另一个隐私和安全漏洞。 @CommonsWare 很公平。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于如何在没有辅助功能权限的情况下检测输入法选择器的可见性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 上保存对特定照片的引用以便在没有选择器的情况下加载?

如何在没有选择器的情况下从应用程序发送电子邮件? [复制]

Android检测辅助功能是不是开启

如何在没有守卫装饰器的情况下始终验证 JWT? (Nest.js + 护照)

UIPageControl 和 VoiceOver/辅助功能

如何在没有按下输入C#WPF的情况下检测我的键盘