Android:是否有办法模拟D-Pad事件(API 10)



问题很简单。我必须模拟dpad事件(UP、DOWN、RIGHT、LEFT、CENTER),以便在由许多按钮和其他元素组成的GUI中导航。有了模拟器D-Pad,我可以不需要一行代码就可以浏览这个GUI。但是我怎么用程序来做呢?

我试了很多次都没有成功:

  • KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_LEFT); View.dispatchKeyEvent(event);什么也没发生(焦点应该向右移动一个元素)

  • 我也读了很多关于windowManager。

  • 并且Instrumentation可以帮助模拟关键事件,但更多的是用于测试,而不是用于应用程序本身。

我认为有一个解决方案,因为反馈可以模拟物理的D-Pad (http://code.google.com/p/eyes-free/source/browse/trunk/ime/latinime/src/com/googlecode/eyesfree/inputmethod/latin/LatinIME.java)

给定

InputConnection ic = getCurrentInputConnection();

您可以通过模拟DPAD down/up事件来移动EditText中的光标。up事件可能就足够了,但为了安全起见,我正在模拟整个事件。

ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_LEFT));

ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_RIGHT));

ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_UP));

ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN));

你有两种方法来实现你的目标:

,

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

前提条件:同上。

第二,例如,我想模拟KeyEvent。KEYCODE_DPAD_UP

getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_UP));
前提条件:必须绑定inputmethod

我找到了一个聪明的解决方案(例如:go down):

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

就是这样,一个内部算法在你选择的方向上找到下一个元素

尝试使用KeyEvent。ACTION_UP而不是ACTION_DOWN。为我解决了类似的问题

相关内容

  • 没有找到相关文章

最新更新