Android 模拟按键

Android 模拟按键
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( 0 0 " 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.一个完整的键盘事件包括按下的弹起两个事件。

你可能感兴趣的:(Android 模拟按键)