gpt4 book ai didi

android - 在 4.3 android 版本的 uiautomator 中使用仪器类长按问题

转载 作者:行者123 更新时间:2023-11-29 21:32:07 25 4
gpt4 key购买 nike

我尝试使用 Motion Event 类和 instrumentation 类在屏幕上执行长按。

此类似乎适用于 4.2 及以下设备,但当我尝试在 4.3 设备上实现相同功能时,我遇到了以下异常

谁能帮我解决这个问题

提前致谢

我用来执行长按事件的方法是

private void longClickOnScreen(float x, float y) {
try {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
MotionEvent event = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_DOWN, x, y, 0);
MotionEvent event2 = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_UP, x, y, 0);
inst.sendPointerSync(event);
Thread.sleep(750);
inst.sendPointerSync(event2);
} catch (NullPointerException e) {
// TODO: handle exception
e.printStackTrace();
}
}



java.lang.RuntimeException: This method can not be called from the main application thread
at android.app.Instrumentation.validateNotAppThread(Instrumentation.java:1651)
at android.app.Instrumentation.sendPointerSync(Instrumentation.java:933)
at com.kpt.adaptxt.uitest.event.EventHandler.longClickOnScreen(EventHandler.java:84)
at com.kpt.adaptxt.uitest.event.EventHandler.longClick(EventHandler.java:149)
at com.kpt.adaptxt.uitest.testsuite.UiautomationTestsuite.testLongpressEvent(UiautomationTes
tsuite.java:24)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.start(UiAutomatorTestRunner.java
:160)
at com.android.uiautomator.testrunner.UiAutomatorTestRunner.run(UiAutomatorTestRunner.java:9
6)
at com.android.commands.uiautomator.RunTestCommand.run(RunTestCommand.java:91)
at com.android.commands.uiautomator.Launcher.main(Launcher.java:83)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

After lots of research I solved the above problem by using following piece of code

private void longClickOnScreen(int x, int y) {
try {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
final MotionEvent eventDown = MotionEvent.obtain(downTime,
eventTime, MotionEvent.ACTION_DOWN, x, y, 0);
eventDown.setSource(InputDevice.SOURCE_TOUCHSCREEN);
final MotionEvent eventUp = MotionEvent.obtain(downTime, eventTime,
MotionEvent.ACTION_UP, x, y, 0);
eventUp.setSource(InputDevice.SOURCE_TOUCHSCREEN);
Thread task = new Thread(new Runnable() {

private Handler handler;

@Override
public void run() {
// TODO Auto-generated method stub
Looper.prepare();
handler = new Handler();
handler.post(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
inst.sendPointerSync(eventDown);
try {
Thread.sleep(750);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
inst.sendPointerSync(eventUp);
}
});
Looper.loop();
}
});
task.start();
} catch (NullPointerException e) {
e.printStackTrace();
}
}

关于android - 在 4.3 android 版本的 uiautomator 中使用仪器类长按问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19156959/

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