做Android系统开发时,有时会需要自定义物理按键的功能,我们首先要知道每个按键对应的键值,然后根据需求更改每个键的功能。
1.按下物理按键时获取到十六进制值(例如:d4),通过adb查看:
adb shell
getevent /dev/input/event1
2.将十六进制值转化成十进制后,在Generic.kl中查看驱动层对应的键值,也就是上报的keycode值(例如:d4转化成十进制为212,对应keycode为CAMERA),Generic.kl文件存放位置:
system/usr/keylayout/Generic.kl
查看Generic.kl文件中212对应的keycode:
key 212 CAMERA
3.将上报的keycode值定义为integer:
frameworks\base\core\java\android\view\KeyEvent.java
public static final int KEYCODE_CAMERA = 27;
4.处理keyevent的keycode值(例如:KEYCODE_CAMERA 或 27):
frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
例如:
case KeyEvent.KEYCODE_CAMERA:{
if(down) {
mContext.sendBroadcast(new Intent("android.intent.action.CAMERA_BTN_CLICK"));
}
break;
}