java - 如何在 Android 自动化 Activity 中触发 Java KeyEvent?

标签 java android keylistener keyevent event-listener

我在我的基础测试类中为我在 Android 设备上运行的应用程序自动化套件声明了以下 KeyEvents。

private static final KeyEvent pressPowerDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POWER);
private static final KeyEvent pressPowerUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_POWER);

然后我找出在 Android 测试上下文中运行的 Activity ,并将该上下文转换为 Activity 以触发事件:

if (_context instanceof Activity) {
    Activity activity = (Activity) _context;
    activity.dispatchKeyEvent(pressPowerDown);
    activity.dispatchKeyEvent(pressPowerUp);

在自动化过程中检查设备时,上述 KeyEvent 不会触发。 我读到了 KeyListenerssimulating KeyEvents ,但我想在这里做的并不完全属于这些类别中的任何一个(不使用 Robot,而是一个具有自己的 Activity 的内部测试框架)。

我最初的想法是我需要重新调整 Activity 的重点,但现在我开始认为我需要某种 KeyListener,鉴于这是一个测试套件,我不确定该放在哪里,而不是接口(interface)类;它根本没有任何与之关联的接口(interface)!

如果有人知道如何在其他程序中创建和触发 KeyEvents,假设我们无法访问它们的内部机制(无法修改内部测试工具 - 只能修改当前测试套件的运行状态),它将不胜感激。

编辑:我测试了 KeyEvent 在尝试触发 3 次后是否被消耗:

System.out.println("Was the event consumed? " + activity.dispatchKeyEvent(pressPowerUp))

它从未被解雇,这让我相信我们需要某种倾听者。如果有人知道如何在类中实现监听器,或者如果我可以声明监听器类并覆盖“dispatchKeyEvent”方法,那将是一个很大的帮助。

最佳答案

答案实际上有点复杂,但还算不错,因为我从其他开发人员那里得到了一些更好的反馈。看解释here , 但对于那些不想离开页面的人,基本上是这样做的:

import java.lang.Process;
import java.lang.Runtime;

// your code here
String keyPower = "input keyevent " + KeyEvent.KEYCODE_POWER;
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(keyPower);

简单,但无论关注什么 Activity ,它都能完成。

关于java - 如何在 Android 自动化 Activity 中触发 Java KeyEvent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22817235/

相关文章:

java - 在运行时动态选择方法;访问者模式或反射的替代方案

java - 如何将 java.sql.Timestamp(yyyy-MM-dd HH :mm:ss. S) 格式化为日期(yyyy-MM-dd HH:mm:ss)

android - 支持图书馆的好处

android - 日期选择器无法在 scrollView 中正确滚动

Android上传图片到WCF服务 "Parameter is not valid."

java - JTextField 和 keyListener java swing

java - 我可以在 Firebase 数据库中存储 Int 值吗

java - Hadoop Map Reduce For Google web graph

java - 如果没有 EventQueue 的 invokeLater,第一个 UserTypedString 不会在 keyTyped (keyListener) 中被识别

Java ComboViewer 对编辑有反应,KeyListener?