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