题目比较简单,《键盘管理》,但是实际上的工作还是比较复杂的,先描述一下:
环境:
1、产品的硬件完全是自己开发的,用了芯片厂家给的Gingerbread的开发包,android的编译及在板子上跑没问题了。
2、一个已经销售产品的模块,具有管理键盘的功能。使用串口和新开发的板子连接。模块和主板采用私有的通讯协议。其中有很多按键被定义成了系统按键。
3、新开发的板子上也管理了几个按键,主要是系统按键。
目的:
1、按串口管理的一部分系统按键,android启动相应的应用程序。
2、按串口管理的另一部分系统按键,android执行特定的操作。
3、按串口管理的数字键及字母键时,如果有输入焦点,在相应的输入框内显示相应的字符,如果当前应用没有输入框或在桌面上,启动一个特定的应用程序。
因为串口还会被rild使用,所以读按键值的时候不能和rild中reference-ril的atchannel.c的readline冲突。
目前涉及到的部分有:
rild,主要是libreference-ril.so相关的代码。
uinput的操作。
frameworks/base/libs/ui下面的EventHub.cpp、Inpue*.cpp
frameworks/base/services/jni/com_android_server_InputManager.cpp
frameworks/base/services/java/com/android/server/Input*.java
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
要从count = read(s_fd, p_read,MAX_KEY_CODE); 读串口开始,一直分析到如何
Intent intent = new Intent(Intent.ACTION_MY_ACTIVITY); 启动一个特定的应用。
其中涉及到的部分比较多,要一步一步的分析及整理。