【问题标题】:How can I implement a click in my android app programatically?如何以编程方式在我的 android 应用程序中实现点击?
【发布时间】:2020-08-02 07:15:34
【问题描述】:

我想以编程方式实现对我的应用的点击。为此,我想到了实现触摸的 adb 命令。命令是: adb shell input tap x y 该命令适用于我的 adb shell,但我无法找到以编程方式实现它的方法。 我尝试了以下代码:

private void runShellCommand(String command) throws Exception {
        Process process = Runtime.getRuntime().exec(command);
        process.waitFor();
        }

但我在调试器中收到此错误:

java.io.IOException: Cannot run program "adb": error=13, Permission denied

有人可以帮我解决这个问题吗!

PS:即使您知道借助提供 x 和 y 坐标以编程方式触摸屏幕的其他方法,也请帮忙!

【问题讨论】:

  • 您是否尝试自动打开应用程序?
  • @Pronoy999 没有。我做了一个应用程序。在那个应用程序中,我会输入 x 和 y 坐标。之后,我将单击一个按钮。单击按钮后,我希望应用程序自动单击我输入的坐标。

标签: android android-studio adb


【解决方案1】:

我假设您想触摸应用内的某些内容。

捕获一个 ACTION_DOWN MotionEvent(通过触摸动作的调试器)并记下它的属性(停机时间、事件时间和元状态)。只需执行一次即可确定您应该使用哪种值来模拟典型的触摸事件。

在您的测试程序中,使用 MotionEvent.obtain() 创建一个新的 MotionEvent

MotionEvent newTouch = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN,
    x, y, metaState);

在您的视图上调度事件:

view.dispatchTouchEvent(newTouch);

你可以试试这个。我一直将它用于我自己的 android 测试应用程序。

【讨论】:

  • 哦...你能告诉我如何捕捉 ACTION_DOWN MotionEvent 吗?
  • 好的,我得到了所有必需的东西。我通过一个视图作为它工作的按钮。但是当我将视图作为相对布局(布局文件的父级)传递时,触摸不起作用。这对屏幕的主要布局(第一/父布局)不起作用吗?
  • 我从未尝试过相对布局。您可以尝试使用约束布局并检查吗?
  • 如果您有某种解决方案,请告诉我。与此同时,我也在打猎……
【解决方案2】:
  1. Android 中的每个应用都在单独的用户下运行,这些用户无权执行 adb。因此,您会收到“Permission Denied”。
  2. 其实你不需要adb。您的命令请求 adb 调用 shell 以运行 input。所以,你可以直接执行input x y

【讨论】:

  • 我尝试按照您在第 2 点中提到的那样运行它,但这只会使错误消失。没有触摸发生...
  • 尝试使用 Pronoy999 建议的方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2012-05-16
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
相关资源
最近更新 更多