我可以通过按键在后台应用程序中以编程方式在 Android 中生成触摸事件吗?

Can I programatically generate a touch event in Android from background app on keypress?

我想要做的是当我按下某个键盘按钮或组合时,应该使用给定的屏幕坐标触发触摸事件。

我想使用连接到 Android 设备的物理键盘。我想编写在后台连续运行并监听特定组合的代码,然后在按下时创建具有特定坐标的触摸事件。触摸事件应该被前台的任何应用程序接收。

更具体地说,我发现 Facebook Messenger 应用程序在我按回车键时不发送消息但在文本框中插入换行符,这很烦人。或者至少有一个选项来启用或禁用此功能会很好,例如应用程序的 Windows Phone 版本。但它没有这个选项,当我在物理键盘上键入消息并且必须触摸 phone 本身的小按钮,将我的手从键盘上移开,或者我必须使用使用 Tab 键导航到 select 按钮控件,然后按回车键。

此应用程序主要供个人使用,我问这个问题是为了确保甚至可以编写此类代码并增长我的知识。

应用程序无法生成任意触摸事件,除非可能在 root 设备上使用超级用户权限。欢迎您使用辅助功能框架创建一个AccessibilityService,但其输入选项非常有限。

我设法按照 CommonsWare 的建议将此应用程序编写为辅助功能服务。就像一个魅力。

如果有人感兴趣,是的,它只能在 root 设备上使用。您可以在根 shell 中使用 sendevent 命令模拟触摸事件(我使用的是 ProcessDataOutputStream 类为此)。首先你需要确定当前设备上触摸屏的设备标识符是哪个,最终我需要为一个触摸事件发出8条命令。

这个博客post对我帮助很大:

http://ktnr74.blogspot.hu/2013/06/emulating-touchscreen-interaction-with.html