从 Web 应用程序检测 Android InputMethod() API

Posted

技术标签:

【中文标题】从 Web 应用程序检测 Android InputMethod() API【英文标题】:Detecting Android InputMethod() API from web app 【发布时间】:2022-01-13 00:32:11 【问题描述】:

我正在构建一个将在 android 设备上运行的网络应用程序。此设备具有其他软件,可通过 Android InputMethod() API 创建文本输入。如果我的 Web 应用程序上的输入字段具有焦点,则此文本会正确插入到输入字段中。问题是,如果在 Web 应用程序中的输入字段没有焦点时发生此 InputMethod 文本事件,则文本会丢失。我需要能够始终通过 Android InputMethod() API 读取文本,但它不会生成任何 keydown/keyup/keypress 事件,所以我有点难过这是否可能。有什么想法吗?

【问题讨论】:

【参考方案1】:

对此的最佳答案是,您可能无法通过 Web 应用程序执行此操作,您需要编写一个实际的原生应用程序。但这里是对发生的事情的解释。

InputMethod 通过 InputConnection 进行通信。当视图获得焦点时,会在视图上调用 getInputConnection()。如果返回非 null,则视图表示它能够接受输入数据,输入连接将连接到 IME(键盘),并且数据/请求将通过 InputConnection 发送。所以数据只有在通过视图绑定时才从键盘发送。

您可以通过聚焦视图、覆盖 getInputConnection() 函数并监听其上的各种调用(尤其是 commitText())来获取输入数据。但在 Web 应用程序中,您拥有的唯一视图是 WebView 本身。覆盖它的 getInputConnection 函数可能会破坏正常的 Web 文本视图。所以我不希望这会起作用。

当然这通常不是问题,因为通常软键盘不会显示,除非文本字段被聚焦,因此您实际上不会遇到这个问题,尽管您可以通过几种方式强制键盘向上。

【讨论】:

这让我很伤心,但非常感谢您详细解释为什么这不起作用!

以上是关于从 Web 应用程序检测 Android InputMethod() API的主要内容,如果未能解决你的问题,请参考以下文章

从浏览器检测是不是在 Android 中安装了特定应用程序

检测 Web 应用程序是不是是 Android 主屏幕的书签

Android:在自定义 Web 视图中检测并打开外部链接

HTML unicode ☰ 在 android chrome 浏览器的移动 Web 应用程序菜单中未检测到

检测在 Android 股票浏览器上作为主屏幕应用程序运行的 Web 应用程序

如何通过Web App(ReactJS)检测Android设备虚拟键盘中的空格键