2011-12-19 45 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

相关问题