2013-03-19 156 views
1

我目前正在模擬一個應用程序,模擬d-pad(上,下,左,右)。問題是,我無法弄清楚如何將這些按鍵發送到其他應用程序。模擬箭頭按鍵在Android中

目前,我正在使用Instrumentation,它在我的應用程序的活動中工作得很好。 這裏是箭頭鍵的片段留下代碼:

new Thread(new Runnable() {   
        @Override 
        public void run() {     
         new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT); 
        } 
       }).start(); 

這種實現的問題是,由於一個機器人的安全功能,我無法發送按鍵到其他應用程序。 在尋找注射按鍵的不同方法之後,我發現了這個article。但是,在嘗試示例代碼之後,它似乎不起作用。我戳了一下,發現android似乎沒有鍵盤的輸入設備。當我掃描不同的輸入設備時,我得到諸如方向傳感器等東西。下面是我手機上所有輸入設備(T-959 Galaxy S)的圖片。

input devices

正如你所看到的,沒有這些設備是鍵盤。我有一種感覺,這是因爲我的手機沒有物理鍵盤。 (柏樹是電容鍵,白羊座是音量按鈕,而mxt224是觸摸屏控制器)

經過多一點研究後,我發現android中的可訪問性API有限制注入事件的能力,但那些只是非常基本的東西,如切換視圖焦點等(AccessibilityNodeInfo)。不過,我有一種感覺,我可以將其擴展爲支持箭頭鍵按下。

所以目前,我很困惑要去哪裏。有沒有人曾經做過這樣的事情?由於Android中的安全功能,似乎簡單的箭頭鍵注入(無其他)非常令人沮喪。所有建議都歡迎。

編輯:我可能不是很清楚,但我很好,只爲根植電話建立此。唯一的要求是,這個應用程序必須在手機上獨立運行,而不必通過OTG連接到任何外部鍵盤,或通過adb連接到計算機。

回答

4

我想在幾天前模擬DPAD按鍵事件,並且我找到了一個有其自身侷限性的解決方案。

箭頭按鍵可以使用adb命令input keyevent <keycode>來模擬。 所以如果你想模擬一個DPAD LEFT鍵然後使用adb命令adb input keyevent 21

要重新使用這段代碼並將其向前擴展,我創建了一個獨立的swing應用程序,在該應用程序中,我選擇需要發送按鍵事件的設備,然後使用計算機的現有鍵盤輸入按鍵[我將鍵盤鍵碼映射到android鍵碼]。

我進一步擴大了應用程序的範圍,包括遠程和遊戲手柄按鈕,一旦完成,我會上傳項目上的git。

希望這會有所幫助。

+0

我是否能夠在不連接到計算機的手機上運行嗎?我是否將它作爲具有su root訪問權限的shell命令運行?這似乎很簡單,但我認爲這仍然取決於輸入設備(我可能是錯的)。我很樂意看到這一點,因爲這聽起來像是我的問題的一個非常簡單的解決方案。 – tincan 2013-03-19 19:15:04

+0

我建議的解決方案需要連接到計算機,因爲我使用的是計算機鍵盤。但您可以通過從android設備分派shell命令來做同樣的事情 – Atrix1987 2013-03-20 03:11:02

+0

DPE LEFT事件的所有設備的keyevent 21是否通用?我會承認是的,因爲它是一個adb命令,但我只是想確定。 – tincan 2013-03-20 19:33:26