Calvin's Tech Space

成于坚忍,毁于浮躁

   :: 首页 :: 联系 :: 聚合  :: 管理
2 
 3 import android.app.Activity; 
 4 import android.os.Bundle; 
 5 import android.os.DeadObjectException; 
 6 import android.os.ServiceManager; 
 7 import android.view.IWindowManager; 
 8 import android.view.KeyEvent; 
 9 import android.view.Menu; 
10 import android.view.View; 
11 import android.view.View.OnClickListener; 
12 
13 public class SimualteKeyInput extends Activity { 
14 
15      /* The WindowManager capable of injecting keyStrokes. */ 
16      final IWindowManager windowManager = IWindowManager.Stub 
17                .asInterface(ServiceManager.getService("window"
)); 
18 
19      /** Called when the activity is first created. */ 
20      @Override 
21      public void onCreate(Bundle icicle) { 
22           super.onCreate(icicle); 
23           setContentView(R.layout.main); 
24            
25           /* Make the button do the menu-popup. */ 
26           this.findViewById(R.id.cmd_simulate_key).setOnClickListener( 
27                     new OnClickListener() { 
28                          @Override 
29                          public void onClick(View arg0) { 
30                               /* Start the key-simulation in a thread 
31                                * so we do not block the GUI. */ 
32                               new Thread(new Runnable() { 
33                                    public void run() { 
34                                         /* Simulate a KeyStroke to the menu-button. */ 
35                                         simulateKeystroke(KeyEvent.KEYCODE_SOFT_LEFT); 
36                                    } 
37                               }).start(); /* And start the Thread. */
 
38                          } 
39                     }); 
40      } 
41       
42      /** Create a dummy-menu. */ 
43      @Override 
44      public boolean onCreateOptionsMenu(Menu menu) { 
45           boolean supRetVal = super.onCreateOptionsMenu(menu); 
46           menu.add(00"Awesome it works =)"); 
47           return supRetVal; 
48      } 
49 
50      /** Wrapper-function taking a KeyCode. 
51       * A complete KeyStroke is DOWN and UP Action on a key! */ 
52      private void simulateKeystroke(int KeyCode) { 
53           doInjectKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyCode)); 
54           doInjectKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyCode)); 
55      } 
56 
57      /** This function actually handles the KeyStroke-Injection. */ 
58      private void doInjectKeyEvent(KeyEvent kEvent) { 
59           try { 
60                /* Inject the KeyEvent to the Window-Manager. */ 
61                windowManager.injectKeyEvent(kEvent, false);
64           } catch (DeadObjectException e) { 
65                e.printStackTrace(); 
66           } 
67      } 
68 }

注意:
1.这个模拟的键盘敲击事件只能作用于一个app之内,不能向全系统发送。
2.需要添加INJECT-KEYEVENT权限。
3.一个完整的键盘事件包括按下的弹起两个事件。
posted on 2010-03-18 13:35 calvin 阅读(5944) 评论(0)  编辑  收藏 所属分类: Android

只有注册用户登录后才能发表评论。


网站导航: