我在我的基础测试类中声明了下面的KeyEvents,用于我正在运行的用于应用程序的Android设备上的自动化套件。
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上下文中运行的活动,并将该上下文转换为一个活动来触发事件:
if (_context instanceof Activity) {
Activity activity = (Activity) _context;
activity.dispatchKeyEvent(pressPowerDown);
activity.dispatchKeyEvent(pressPowerUp);在自动化过程中检查设备时,上面提到的KeyEvent不会触发。我读过关于KeyListeners和模拟KeyEvents的文章,但是我在这里要做的事情并不完全属于这两类(不是使用机器人,而是一个有自己活动的内部测试框架)。
我最初的想法是需要重新调整活动的焦点,但现在我开始认为我需要某种KeyListener,考虑到这是一个测试套件,而不是一个接口类,我不知道该放在哪里;它根本没有任何与它相关的接口!
如果有人知道如何在其他程序中创建和激活KeyEvents,考虑到我们无法访问他们的内部机制(不能修改内部测试工具--只有当前测试套件的运行状态),我们会非常感激的。
编辑:我测试了一下,在尝试使用KeyEvent三次之后,它是否被消耗过:
System.out.println("Was the event consumed? " + activity.dispatchKeyEvent(pressPowerUp))它从来没有被解雇,让我相信我们需要某种倾听者。如果有人知道如何在类中实现侦听器,或者允许我声明侦听器类并重写"dispatchKeyEvent“方法,这将是一个很大的帮助。
发布于 2014-04-04 19:42:44
答案其实有点复杂,但也不算太糟,因为我从其他开发人员那里得到了一些更好的反馈。请参见说明这里,但是对于那些不想离开页面的人,基本上可以这样做:
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);简单化,但它可以完成它,无论什么活动是重点。
https://stackoverflow.com/questions/22817235
复制相似问题