您的位置:首页 > 移动开发 > Android开发

Android应用程序键盘(Keyboard)消息处理机制分析(5)

2011-10-24 00:59 633 查看
Step 19. EventHub.openPlatformInput

这个函数定义在frameworks/base/libs/ui/EventHub.cpp文件中:

bool EventHub::openPlatformInput(void)

{

......

res = scanDir(device_path);

if(res < 0) {

LOGE("scan dir failed for %s\n", device_path);

}

return true;

}

这个函数主要是扫描device_path目录下的设备文件,然后打开它们,这里的变量device_path定义在frameworks/base/libs/ui/EventHub.cpp文件开始的地方:

static const char *device_path = "/dev/input";

在设备目录/dev/input中,一般有三个设备文件存在,分别是event0、mice和mouse0设备文件,其中,键盘事件就包含在event0设备文件中了。 Step 20. EventHub.scanDir

这个函数定义在frameworks/base/libs/ui/EventHub.cpp文件中:

int EventHub::scanDir(const char *dirname)

{

char devname[PATH_MAX];

char *filename;

DIR *dir;

struct dirent *de;

dir = opendir(dirname);

if(dir == NULL)

return -1;

strcpy(devname, dirname);

filename = devname + strlen(devname);

*filename++ = '/';

while((de = readdir(dir))) {

if(de->d_name[0] == '.' &&

(de->d_name[1] == '\0' ||

(de->d_name[1] == '.' && de->d_name[2] == '\0')))

continue;

strcpy(filename, de->d_name);

openDevice(devname);

}

closedir(dir);

return 0;

}

根据上面一步的分析,这个函数主要就是调用openDevice函数来分别打开/dev/input/event0、/dev/input/mice和/dev/input/mouse0三个设备文件了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息