2011-12-19 44 views
6

問題很簡單。我必須模擬dpad事件(UP,DOWN,RIGHT,LEFT,CENTER),以在我的GUI中導航,其中包含許多按鈕和其他元素。使用模擬器的D-Pad,我可以在沒有線代碼的情況下導航拋出這個GUI。但是,我怎樣才能以編程方式做到這一點Android:有沒有辦法模擬D-Pad Events(API 10)?

我已經嘗試了很多,但沒有成功:

  • KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_LEFT); View.dispatchKeyEvent(event); 什麼也沒有發生(重點應一個元素移動到右)

  • 我也看到了很多關於windowManager.injectKeyEvent但沒有發現任何工作。

  • 而且Instrumentation可以幫助模擬keyevents,但更多的是用於測試,而不是用於應用程序本身。

我認爲這是一個解決方案,因爲對講可以模擬物理d-墊(http://code.google.com/p/eyes-free/source/browse/trunk/ime/latinime/src/com/googlecode/eyesfree/inputmethod/latin/LatinIME.java

+0

我已經找到了對講解決方案,他們的作品與InputConnection。 final InputConnection ic = getCurrentInputConnection(); 但我必須從活動發送D-Pad keyevents。 – NitroBoarder 2011-12-19 22:24:11

回答

2

我找到了聰明的解決方案(例如,用於下去):

bic=new BaseInputConnection(this.getWindow().getDecorView(),false); 
KeyEvent event2 = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN,0, KeyEvent.META_SYM_ON, 0, 0, KeyEvent.FLAG_VIRTUAL_HARD_KEY); 

bic.sendKeyEvent(event2); 

這一切,一種內部算法,用於在您選擇的方向上查找下一個元素

+0

這對我不起作用。 sendKeyEvent總是返回false,表示「BaseInputConnection不再有效」。無論這是什麼意思。 – vangorra 2014-04-02 21:05:05

0

嘗試使用KeyEvent.ACTION_UP而不是ACTION_DOWN。爲我解決了類似的問題。

1

你有兩種方式來實現自己的目標:

首先,

Instrumentation inst=new Instrumentation(); 
inst.sendKeyDownUpSync(int keycode); 

先決條件:在相同的過程。

其次,對於examble,我們希望能夠模擬KeyEvent.KEYCODE_DPAD_UP

getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_UP)); 

先決條件:必須綁定inputmethd

+0

謝謝你,第二個解決方案爲我工作。 – Hamid 2014-04-21 17:37:22

相關問題