【问题标题】:Is it possible to simulate a click on the screen in Android? [duplicate]是否可以在 Android 中模拟点击屏幕? [复制]
【发布时间】:2013-05-20 10:23:26
【问题描述】:

是否可以通过坐标或视图元素模拟“点击”(触摸屏)?

【问题讨论】:

  • 这个“模拟”会产生什么?
  • 例如:如果我的应用是计算器我要“编程”,你按“2”“+”“3”和“=”,即模拟按下这4个按钮。也就是说,用户会看到没有按下任何东西,比如单独按下“2”按钮,然后按下“+”...

标签: android click touchscreen


【解决方案1】:

可以在安卓屏幕上模拟触摸事件。如果您有视图的坐标,则可以使用 adb shell 命令生成触摸事件。例如-

adb shell 输入 tap x y

其中 x 和 y 是您的坐标。您可以从终端运行此命令。如果要从 android 代码运行命令,请使用“/system/bin/ input tap x y”并使用 Runtime.getRuntime() 方法运行此命令。详情请回复,乐于助人! :)

【讨论】:

    【解决方案2】:

    作为azdev suggests,试试这个:

        view.setOnTouchListener(new OnTouchListener()
    {
        public boolean onTouch(View v, MotionEvent event)
        {
            Toast toast = Toast.makeText(
                getApplicationContext(), 
                "View touched", 
                Toast.LENGTH_LONG
            );
            toast.show();
    
            return true;
        }
    });
    
    
    // Obtain MotionEvent object
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis() + 100;
    float x = 0.0f;
    float y = 0.0f;
    // List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
    int metaState = 0;
    MotionEvent motionEvent = MotionEvent.obtain(
        downTime, 
        eventTime, 
        MotionEvent.ACTION_UP, 
        x, 
        y, 
        metaState
    );
    
    // Dispatch touch event to view
    view.dispatchTouchEvent(motionEvent);
    

    【讨论】:

    • 在视图/屏幕上模拟 onTouch 的有效、非常简单的方法。
    • 浮点 x 和 y 是什么?是否可以定位 webview?
    • @gumuruh : 您需要部署触摸的设备屏幕的 x 和 y 坐标。
    • 如果假设我从 webview 元素获取 x,y 的位置....然后我想触摸 x+20 和 y+20,这意味着更多的正确位置和更多到底部位置……那还可以触摸吗?
    • @gumuruh:它可以是可触摸的,但您必须添加检查以确认它是否不在屏幕之外。顺便说一句,y+20 意味着更多的顶部位置,而不是底部。
    【解决方案3】:

    大概你有一些你想通过点击来调用的东西。所以......如果它是一个实际的按钮,您可以在其上调用performClick()。如果它不是按钮,那么只要满足您期望的条件,就调用您希望执行的任何方法。如果您提供更多关于您实际尝试做的事情的详细信息,这可能会有所帮助。

    【讨论】:

      【解决方案4】:

      在视图上,是的。通过坐标,一个 Java 机器人,我不知道。

      例如:

      Button buttonFoo = (Button)findViewById(R.id.button_foo);
      buttonFoo.performClick();
      

      【讨论】:

      • 你可以试试robotium,但它的功能非常有限。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      相关资源
      最近更新 更多