在TP或者Keypad的功能还没准备好时,想要系统实现Home/Back/Menu等按键的功能,可以使用Android自带的input工具,命令为input keyevent <keycode>,模拟物理按键。
使用方法: 1. adb shell进入终端 2. 输入命令input keyevent <keycode>
示例:
1. 输入input keyevent 82 可以实现Menu button的功能,也可以解除Android屏幕的锁屏 2. 输入input keyevent 4 可以实现Back button的功能 3. 输入input keyevent 3 可以实现Home button的功能
Keycode List:
keycode event
3 --> HOME
4 --> BACK
5 --> CALL(电话)
6 --> ENDCALL(挂电话)
7 --> 0
8 --> 1
9 --> 2
10 --> 3
11 --> 4
12 --> 5
13 --> 6
14 --> 7
15 --> 8
16 --> 9
17 --> STAR(*)
18 --> POUND(#)
19 --> UP
20 --> DOWN
21 --> LEFT
22 --> RIGHT
23 --> CENTER
24 --> VOLUME_UP
25 --> VOLUME_DOWN
26 --> POWER
27 --> CAMERA
28 --> CLEAR
29 --> A
30 --> B
31 --> C
32 --> D
33 --> E
34 --> F
35 --> G
36 --> H
37 --> I
38 --> J
39 --> K
40 --> L
41 --> M
42 --> N
43 --> O
44 --> P
45 --> Q
46 --> R
47 --> S
48 --> T
49 --> U
50 --> V
51 --> W
52 --> X
53 --> Y
54 --> Z
55 --> COMMA(,)
56 --> PERIOD(.)
57 --> ALT_LEFT
58 --> ALT_RIGHT
59 --> SHIFT_LEFT
60 --> SHIFT_RIGHT
61 --> TAB
62 --> SPACE
63 --> SYM(输入法)
64 --> EXPLORER
65 --> ENVELOPE
66 --> ENTER(回车)
67 --> DEL
68 --> GRAVE(')
69 --> MINUS(-)
70 --> EQUALS(=)
71 --> LEFT_BRACKET([)
72 --> RIGHT_BRACKET(])
73 --> BACKSLASH(\)
74 --> SEMICOLON(;)
75 --> APOSTROPHE
76 --> SLASH
77 --> AT(@)
78 --> NUM
79 --> HEADSETHOOK
80 --> FOCUS
81 --> PLUS(+)
82 --> MENU //可以将Android屏幕解锁
83 --> NOTIFICATION
84 --> SEARCH
android 中如何模拟back键
主要是在使用Fragment时能够返回前一级,所以才找到了这些资料。
有两种方式可以实现,直接上代码
方法1:
public void onBack(){
new Thread(){
public void run() {
try{
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
}
catch (Exception e) {
Log.e("Exception when onBack", e.toString());
}
}
}.start();
}
注意该方法不能放在主线程中,否则会报错。
方法2:
try{
Runtime runtime=Runtime.getRuntime();
runtime.exec("input keyevent " + KeyEvent.KEYCODE_BACK);
}catch(IOException e){
Log.e("Exception when doBack", e.toString());
}
总结:方法1比方法2响应快些。
- @Override
- public void onBackPressed() {
- // do something what you want
- super.onBackPressed();
- }
@Override
public void onBackPressed() {
// do something what you want
super.onBackPressed();
}
方法二:重写dispatchKeyEvent
- @Override
- public boolean dispatchKeyEvent(KeyEvent event) {
- // TODO Auto-generated method stub
- if (event.getAction() == KeyEvent.ACTION_DOWN
- && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
- //do something what you want
- return true;//返回true,把事件消费掉,不会继续调用onBackPressed
- }
- return super.dispatchKeyEvent(event);
- }
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == KeyEvent.ACTION_DOWN
&& event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
//do something what you want
return true;//返回true,把事件消费掉,不会继续调用onBackPressed
}
return super.dispatchKeyEvent(event);
}
方法三:使用测试框架Instrumentation,模拟任意键按下动作,注意的是该方法不能在主线程中使用,只能开启新线程,带来的问题就是反应速度较慢,项目中不建议使用。
调用actionKey(KeyEvent.KEYCODE_BACK);产生back键单击效果
- /**
- * 模拟键盘事件方法
- * @param keyCode
- */
- public void actionKey(final int keyCode) {
- new Thread () {
- public void run () {
- try {
- Instrumentation inst=new Instrumentation();
- inst.sendKeyDownUpSync(keyCode);
- } catch(Exception e) {
- e.printStackTrace(); }
- }
- }.start();
- }