【问题标题】:Android - "Faking" a touch event not workingAndroid - “伪造”触摸事件不起作用
【发布时间】:2015-05-29 13:25:25
【问题描述】:

我想伪造一个触摸事件,我得到了可能的答案here。然而,当我试图让它工作时,它没有工作。

请注意,我正在线程中运行以下代码。

private Handler handler = new Handler(Looper.getMainLooper());

private final Runnable runnable = new Runnable() {
    @Override
    public void run() {
        View ParentView = (View)view.getRootView();
        long downTime;
        long eventTime;

        Log.v("Screen Tapper", "Start Tapping");

        Log.v("Screen Tapper", "tapTimes ----- "+1);
        downTime = eventTime = SystemClock.uptimeMillis();
        MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x-5, y-5, 0);
        ParentView.onTouchEvent(event);
        Log.v("Screen Tapper", "touchDown ----- "+x+","+y);

        handler.postDelayed(runnable, 100000);

        downTime = eventTime = SystemClock.uptimeMillis();
        MotionEvent event2 = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x-5, y-5, 0);
        ParentView.onTouchEvent(event2);
        Log.v("Screen Tapper", "touchUp ----- "+x+","+y);

        handler.postDelayed(runnable, 100000);
    }
};

当我想启动或停止线程时,我基本上会调用

Handler.post(runnable);

Handler.removeCallBack(runnable);

但是,此方法不起作用。

我在多个游戏甚至我自己的应用程序上都尝试过。 我知道这个线程正在运行,因为日志记录正在运行。然而,按钮只是没有被按下。

感谢任何帮助

【问题讨论】:

  • “我在多个游戏甚至我自己的应用程序上都试过了”——它肯定不会在任何其他应用程序上工作。您不能以这种方式将假触摸输入发送到另一个应用程序。充其量,这种事情可能适用于您自己的应用程序。
  • 谢谢,但我希望它可以在其他应用程序上运行。有方法吗?还是只是没有办法做这样的事情?

标签: java android multithreading touch android-event


【解决方案1】:

不可能向其他应用程序发送任意假触摸事件,除非是在 root 设备上。即使在那里,它也将通过对低级 Linux 输入的东西 AFAIK 大惊小怪,而不是通过 Android SDK。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2012-06-17
    • 2020-09-04
    • 1970-01-01
    相关资源
    最近更新 更多