gpt4 book ai didi

android - 如何在android webview中模拟特定坐标处的点击?

转载 作者:行者123 更新时间:2023-11-29 01:46:58 27 4
gpt4 key购买 nike

我能够使用 MotionEvent.obtain 在典型的 android View (文本框、按钮等)上模拟点击事件,如下所示:

 int meta_state = 0;
MotionEvent motionEvent = MotionEvent.obtain(
SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),
MotionEvent.ACTION_DOWN,
x,
y,
meta_state
);
motionEvent.recycle();

view_tapped.dispatchTouchEvent(motionEvent);

view_tapped 是对我要将事件发送到的 View 的引用。但是,当我在 webview 上调用 dispatchTouchEvent 时,它似乎没有点击任何内部元素。

我还在 webview 中放置了一个 onTouchListener,然后在手指实际点击 View 时转储与 motionevent 相关的所有信息,然后使用所有相同的信息创建一个新的 motionevent 并将其发送到 WebView ,它没有点击屏幕。 onTouchListener 仍会触发,但不会点击屏幕上的元素。

我也尝试用 Javascript 来做,试图找出哪个元素位于特定坐标,然后通过注入(inject) javascript 触发点击事件,但也没有成功。

关于我做错了什么有什么想法吗?

最佳答案

这是我的解决方案:

private void simulateClick(float x, float y) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
MotionEvent.PointerProperties[] properties = new MotionEvent.PointerProperties[1];
MotionEvent.PointerProperties pp1 = new MotionEvent.PointerProperties();
pp1.id = 0;
pp1.toolType = MotionEvent.TOOL_TYPE_FINGER;
properties[0] = pp1;
MotionEvent.PointerCoords[] pointerCoords = new MotionEvent.PointerCoords[1];
MotionEvent.PointerCoords pc1 = new MotionEvent.PointerCoords();
pc1.x = x;
pc1.y = y;
pc1.pressure = 1;
pc1.size = 1;
pointerCoords[0] = pc1;
MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, 1, properties,
pointerCoords, 0, 0, 1, 1, 0, 0, 0, 0 );
dispatchTouchEvent(motionEvent);

motionEvent = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_UP, 1, properties,
pointerCoords, 0, 0, 1, 1, 0, 0, 0, 0 );
dispatchTouchEvent(motionEvent);
}

关于android - 如何在android webview中模拟特定坐标处的点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20886857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com