【问题标题】:Android: Background Service to Simulate Touches in Any App Underneath a WindowAndroid:在窗口下模拟任何应用程序中的触摸的后台服务
【发布时间】:2015-05-12 11:39:08
【问题描述】:

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

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

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

我还希望Service 在当前Activity(位于SYSTEM_ALERT_WINDOW 下方)的指定坐标中模拟触摸事件。

我希望我可以在自定义视图上调用View.dispatchTouchEvent(...),因为onTouch(...) 返回false,触摸事件将被传递到底层Activity。它不起作用。

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

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

在所有应用程序之上绘制一个画布:

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,出于明显的安全原因,您不能,除非可能是在根设备上。甚至可访问性 API 也不支持此 AFAICT。允许任意应用向其他应用伪造输入将是一个主要的安全漏洞。
  • 如果专门访问视图,是否至少可以在属于 Android 操作系统的应用程序中模拟触摸输入?我可以做类似 getView().dispatchTouchEvent(..) 的事情吗?
  • "我可以做类似 getView().dispatchTouchEvent(..) 的事情吗?" -- 不,因为View 在另一个进程中,不是你的。
  • 是否有另一种方法可以自动与视图交互?
  • 您可以使用可访问性 API 为您提供的任何内容。您可能可以在有根设备上做更多的事情,但我什至不知道在这种情况下该在哪里为您指明该怎么做。

标签: android touch android-5.0-lollipop


【解决方案1】:

AFAIK,出于明显的安全原因,您不能,除非可能是在 root 设备上。甚至可访问性 API 也不支持此 AFAICT。允许任意应用向其他应用伪造输入将是一个重大的安全漏洞。

如果您的目标是在测试期间执行此操作,则仪器测试允许您在自己的应用中模拟触摸事件。

【讨论】:

  • 我可以在后台服务中使用检测吗?我的设备已植根。我试过了,我没有出错,但是如果触摸是从后台服务发送的,如何确保视图被触摸?谢谢。
  • 现在有可能吗?也许通过可访问性 API?
  • @androiddeveloper:AFAIK,可访问性 API 仍然不允许传递特定的触摸事件。
  • @CommonsWare 眼动追踪应用程序是如何做到的(例如:androidcentral.com/…)?通过使用 adb 命令的硬件?或者也许是三星独有的 API,就像很久以前有人写给我的关于 TeamViewer 的那样:stackoverflow.com/a/20391295/878126?那么关键事件呢?我知道有许多应用程序允许模拟全局后退键(例如:play.google.com/store/apps/…)。它们是如何工作的?
  • @CommonsWare 这对残障人士以及高级用户和开发人员的 UI 自动化工具都有帮助。无论如何,我已经提出了一个请求:code.google.com/p/android/issues/detail?id=231758
猜你喜欢
  • 2014-10-19
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多