WEB开发网
开发学院手机开发Android 开发 Android 事件处理流程 阅读

Android 事件处理流程

 2010-03-19 07:14:00 来源:WEB开发网   
核心提示:...const char* root = getenv("ANDROID_ROOT");snprintf(keylayoutFilename, sizeof(keylayoutFilename),"%s/usr/keylayout/%s.kl", root, tmpfn);..

...

const char* root = getenv("ANDROID_ROOT");

snprintf(keylayoutFilename, sizeof(keylayoutFilename),

"%s/usr/keylayout/%s.kl", root, tmpfn);

...

device->layoutMap->load(keylayoutFilename);

...

}

打开设备的时候,如果 device->classes&CLASS_KEYBOARD 不等于 0 表明是键盘。

常用输入设备的定义有:

enum {

CLASS_KEYBOARD = 0x00000001, //键盘

CLASS_ALPHAKEY = 0x00000002, //

CLASS_TOUCHSCREEN = 0x00000004, //触摸屏

CLASS_TRACKBALL = 0x00000008 //轨迹球

};

打开键盘设备的时候通过上面的 ioctl 获得设备名称,命令字 EVIOCGNAME 的定义在文件:

kernel/include/linux/input.h 中。

#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */

在内核键盘驱动文件 drivers/input/keyboard/pxa27x_keypad.c 中定义了设备名称:pxa27x-keypad

static struct platform_driver pxa27x_keypad_driver = {

.probe = pxa27x_keypad_probe,

.remove = __devexit_p(pxa27x_keypad_remove),

.suspend = pxa27x_keypad_suspend,

.resume = pxa27x_keypad_resume,

.driver = {

.name = "pxa27x-keypad",

.owner = THIS_MODULE,

},

};

ANDROID_ROOT 为环境变量,在android的命令模式下通过 printenv 可以知道它为: system

所以 keylayoutFilename 为:/system/usr/keylayout/pxa27x-keypad.kl

pxa27x-keypad.kl 定义了按键映射,具体内容如下:

----------------------

# NUMERIC KEYS 3x4

key 2 1

key 3 2

key 4 3

key 5 4

key 6 5

key 7 6

key 8 7

key 9 8

key 10 9

key 11 0

key 83 POUND

key 55 STAR

# FUNCTIONAL KEYS

key 231 MENU WAKE_DROPPED

key 192 BACK WAKE_DROPPED

上一页  2 3 4 5 6 7 8  下一页

Tags:Android 事件 处理

编辑录入:coldstar [复制链接] [打 印]
赞助商链接