2012-01-02 132 views
16

如何以编程方式模拟Droid上的按键?我想模仿一个手动按键(出现在机器人上,某人正按键,但它正在编程)。Android模拟按键

有涉及IWindowManager的解决方案,但这不是新SDK中的选项。

+0

测试仪器仪表,修改应用比其他的东西作出反应实际的触摸,并“设备”在Linux级别注入事件是你的3种选择。 – 2012-04-30 07:05:35

回答

32

您可以使用仪器,即跟随从活动的onCreate称为代码将导致菜单打开和关闭多次:

new Thread(new Runnable() {   
     @Override 
     public void run() { 
      try { 
      Instrumentation inst = new Instrumentation(); 
      for (int i = 0; i < 10; ++i) { 
       inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); 
       Thread.sleep(2000); 
       inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); 
       Thread.sleep(2000); 
      } 
      } 
      catch(InterruptedException e){ 
      } 
     } 
    }).start(); 

...但我不知道这是否是你是什么

+4

这正是我正在寻找的,但是...不是严格的测试仪器?我正在寻找一种解决方案,可以在实时应用程序中使用,而不是测试。提前致谢。 – calcrisk33 2012-01-03 19:12:21

+0

@ calcrisk33我一直无法找到任何关于这是否为实时应用程序的可行解决方案的信息。你最终以这种方式使用它? – Kirk 2013-09-06 15:44:51

+1

@Kirk我做了,它模拟一个关键的冲程/按下它非常好。 – calcrisk33 2013-10-30 02:33:29

0

如果您有一个想要消耗事件的视图,可以使用BaseInputConnection类及其sendKeyEvent方法。

要使用它,您需要指定将接收KeyEvent的目标视图(例如EditText)。例如:

EditText editText; 
BaseInputConnection inputConnection = new BaseInputConnection(editText, true); 
inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POUND)); 

这样做的结果就像用户实际上会按#键(同时使编辑文本为焦点)。

0

您还可以使用input text,即:

从计算机通过adb

adb shell input text 'example\\@email.com' 

shell

input text 'example\\@email.com'