簡體   English   中英

您如何在Android自動化活動中觸發Java KeyEvent?

[英]How do you fire a Java KeyEvent inside an Android automation activity?

我在基本測試類中聲明了以下KeyEvent,用於在應用程序的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 Test上下文中正在運行什么活動,並將該上下文強制轉換為活動以觸發事件:

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

在自動化過程中檢查設備時,上述KeyEvent不會觸發。 我了解了有關KeyListeners模擬KeyEvent的信息 ,但是我在這里想要做的並不完全屬於這些類別之一(不使用Robot,而是使用具有自己的Activity的內部測試框架)。

我最初的想法是我需要重新調整活動的重點,但是現在我開始認為我需要某種KeyListener,由於這是一個測試套件,而不是接口類,因此我不確定將其放置在何處; 它根本沒有任何與之關聯的接口!

如果有人知道如何在其他程序中創建和觸發KeyEvent,則鑒於我們無權訪問其內部機制(無法修改內部測試工具-只能修改當前測試套件的運行狀態),不勝感激。

編輯:我測試過嘗試將其觸發三次之后是否查看了KeyEvent:

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

它從未被解雇,這使我相信我們需要某種聽眾。 如果有人對如何在一個類中實現偵聽器有任何想法,或者允許我聲明一個偵聽器類並覆蓋“ dispatchKeyEvent”方法,那將是一個很大的幫助。

一旦我從其他開發人員那里得到了一些更好的反饋,答案實際上有點復雜,但還算不錯。 請參閱此處的說明,但是對於那些不想離開頁面的人,基本上可以這樣做:

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);

簡單化,但無論關注什么活動,它都能完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM