Android:在 Window 下的任何应用程序中模拟触摸的后台服务

Android: Background Service to Simulate Touches in Any App Underneath a Window

我有一个 Service 可以在所有使用包含自定义 ViewSYSTEM_ALERT_WINDOW 的应用程序之上绘制 Canvas

我的 Service 和自定义的 View 都实现了 View.OnTouchListener

Service 的 onTouch(View v, MotionEvent ev){} 方法 returns true 而自定义 View returns false。这允许我在所有应用程序之上显示我的自定义 View,并且仍然与底层 Activity 交互。这部分有效。

我还想让ServiceSYSTEM_ALERT_WINDOW下方的当前Activity的指定坐标中模拟触摸事件。

我希望我可以在自定义视图上调用 View.dispatchTouchEvent(...),因为 onTouch(...) returns false,触摸事件会传递到底层 Activity。没用。

在这种情况下如何模拟任何Activity中的触摸事件?

我使用了以下来源的代码...

在所有应用程序之上画一个canvas:

http://www.piwai.info/chatheads-basics/

Draw an Android canvas on top of all applications?

将触摸传递给底层应用程序:

How can I interact with elements behind a translucent Android app?

模拟触摸:

How to simulate a touch event in Android?

AFAIK,出于明显的安全原因,您不能这样做,除非是在已获得 root 权限的设备上。甚至可访问性 API 也不支持此 AFAICT。允许任意应用伪造对其他应用的输入将是一个主要的安全漏洞。

如果您的 objective 要在测试期间执行此操作,仪器测试允许您在自己的应用程序中模拟触摸事件。