android 通过串口连接一个键盘管理模块,键盘上有系统键、状态键、数字键、字母键。添加一个系统键的管理需要修改的程序如下:
框架部分
./sdk/emulator/keymaps/qwerty.kl:key 250 MY_KEY WAKE
// 修改原始文件后,make android时 ./out/target/product/myXXXX/system/usr/keylayout/qwerty.kl 不会被重新生成。
// 可以且必须同时直接修改该文件。使原始文件和目标文件同步。使用clear android,可以使目标文件重新生成。
./bionic/libc/kernel/common/linux/input.h:#define KEY_MY_KEY 250
./hardware/ril/reference-ril/uinput.c: [0x19] = KEY_MY_KEY,
./kernel/include/linux/input.h:#define KEY_MY_KEY 250
./development/cmds/monkey/src/com/android/commands/monkey/MonkeySourceRandom.java: "KEYCODE_MY_KEY",
./frameworks/base/include/ui/KeycodeLabels.h: { "MY_KEY", 123 },
./frameworks/base/native/include/android/keycodes.h: AKEYCODE_MY_KEY = 123,
./frameworks/base/core/res/res/values/attrs.xml: <enum name="KEYCODE_MY_KEY" value="123" />
./frameworks/base/core/java/android/view/KeyEvent.java:
public static final int KEYCODE_MY_KEY = 123;
private static final int LAST_KEYCODE = KEYCODE_MY_KEY;
./frameworks/base/libs/ui/Input.cpp: case AKEYCODE_MY_KEY:
./frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java:
if (keyCode == KeyEvent.XXXXXXXXXXX) {
;
} else if (keyCode == KeyEvent.KEYCODE_MY_KEY) {
Intent myIntent = new Intent("com.android.MyTest123.MY_KEY_123 ");
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(myIntent);
return true;
} else if (keyCode == KeyEvent.KEYCODE_HOME) {
;
}
java部分:
<intent-filter>
<action android:name="com.android.MyTest123.MY_KEY_123 " />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
上述代码中uinput部分借鉴了 Li XianJing 的uinput的思路,在此表示感谢。代码是同事给的,不知道出处了 :-( 有关uinput编程的思路,也可以借鉴Gingerbread\external\bluetooth中的思路,在此我就不赘述了。