Android假触摸屏

发布于 2024-11-17 06:09:52 字数 76 浏览 2 评论 0原文

是否可以通过代码在屏幕上的特定点(例如(x,y))生成假触摸?我的活动上有一个按钮,但我不想通过触摸屏点击它?有什么办法可以实现这一点吗?

Is it possible to generate a fake touch at a particular point (say (x,y)) on the screen from the code? There is a button on my activity and I dont want to click it through touch screen? Is there any way to achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

唯憾梦倾城 2024-11-24 06:09:52

这个方法应该对你有帮助。

http://developer.android.com/reference/android/view/View .html#performClick()

myButton.performClick();

This method should help you.

http://developer.android.com/reference/android/view/View.html#performClick()

myButton.performClick();
一个人练习一个人 2024-11-24 06:09:52

以下代码生成触摸事件,就好像屏幕被真正触摸一样。

注意:仅限已取得 root 权限的设备

public class Tap {
private static final String SU = "su", TAG = Tap.class.getSimpleName(),
        COMMAND = "/system/bin/input tap %d %d ", ASCII = "ASCII";

public Tap() {

}

public void tap(int x1, int y1) {
    TapTask t = new TapTask(x1, y1);
    t.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}

private class TapTask extends AsyncTask<Void, Void, Void> {
    private int x1, y1;

    public TapTask(int x1, int y1) {
        this.x1 = x1;

        this.y1 = y1;

    }

    protected Void doInBackground(Void... args) {
        try {
            Process sh = Runtime.getRuntime().exec(SU, null, null);

            OutputStream os = sh.getOutputStream();

            os.write((String.format(COMMAND, x1,y1)).getBytes(ASCII));
            os.flush();
            os.close();
            sh.waitFor();

            Log.i(TAG,String.format("tap %d %d ",x1,y1));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
}

The following code generates touch event as if the screen is really touched.

CAUTION: rooted devices only

public class Tap {
private static final String SU = "su", TAG = Tap.class.getSimpleName(),
        COMMAND = "/system/bin/input tap %d %d ", ASCII = "ASCII";

public Tap() {

}

public void tap(int x1, int y1) {
    TapTask t = new TapTask(x1, y1);
    t.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}

private class TapTask extends AsyncTask<Void, Void, Void> {
    private int x1, y1;

    public TapTask(int x1, int y1) {
        this.x1 = x1;

        this.y1 = y1;

    }

    protected Void doInBackground(Void... args) {
        try {
            Process sh = Runtime.getRuntime().exec(SU, null, null);

            OutputStream os = sh.getOutputStream();

            os.write((String.format(COMMAND, x1,y1)).getBytes(ASCII));
            os.flush();
            os.close();
            sh.waitFor();

            Log.i(TAG,String.format("tap %d %d ",x1,y1));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文