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 閱讀(5947) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 庆城县| 泸定县| 洪雅县| 通化市| 桑日县| 花垣县| 卢湾区| 景洪市| 缙云县| 蓬莱市| 榕江县| 革吉县| 双桥区| 华容县| 郸城县| 蓬莱市| 时尚| 榆树市| 通渭县| 江门市| 安图县| 永平县| 桐乡市| 和硕县| 越西县| 苏州市| 白银市| 扶绥县| 台中市| 佛冈县| 察哈| 萝北县| 崇义县| 犍为县| 辽宁省| 南通市| 五河县| 锦州市| 无锡市| 承德市| 涿鹿县|