WEB开发网
开发学院手机开发Android 开发 Android事件处理:按键、触摸屏和滚动球的一些实现... 阅读

Android事件处理:按键、触摸屏和滚动球的一些实现细节

 2010-08-22 04:56:00 来源:WEB开发网   
核心提示:EventHub对输入设备进行了封装,输入设备驱动程序对用户空间应用程序提供一些设备文件,Android事件处理:按键、触摸屏和滚动球的一些实现细节(2),这些设备文件放在/dev/input里面,EventHub扫描/dev/input下所有设备文件,并打开它们,C代码bool EventHub::openPlatf

EventHub对输入设备进行了封装。输入设备驱动程序对用户空间应用程序提供一些设备文件,这些设备文件放在/dev/input里面。

EventHub扫描/dev/input下所有设备文件,并打开它们。

C代码

bool EventHub::openPlatformInput(void)

{

...

mFDCount = 1;

mFDs = (pollfd *)calloc(1, sizeof(mFDs[0]));

mDevices = (device_t **)calloc(1, sizeof(mDevices[0]));

mFDs[0].events = POLLIN;

mDevices[0] = NULL;

res = scan_dir(device_path);

...

return true;

}

bool EventHub::openPlatformInput(void)

{

...

mFDCount = 1;

mFDs = (pollfd *)calloc(1, sizeof(mFDs[0]));

mDevices = (device_t **)calloc(1, sizeof(mDevices[0]));

mFDs[0].events = POLLIN;

mDevices[0] = NULL;

res = scan_dir(device_path);

...

return true;

}

EventHub对外提供了一个函数用于从输入设备文件中读取数据。

C代码

bool EventHub::getEvent(int32_t* outDeviceId, int32_t* outType,

int32_t* outScancode, int32_t* outKeycode, uint32_t *outFlags,

int32_t* outValue, nsecs_t* outWhen)

{

...

while(1) {

// First, report any devices that had last been added/removed.

if (mClosingDevices != NULL) {

device_t* device = mClosingDevices;

LOGV("Reporting device closed: id=0x%x, name=%s ",

device->id, device->path.string());

mClosingDevices = device->next;

*outDeviceId = device->id;

if (*outDeviceId == mFirstKeyboardId) *outDeviceId = 0;

*outType = DEVICE_REMOVED;

delete device;

return true;

}

if (mOpeningDevices != NULL) {

device_t* device = mOpeningDevices;

LOGV("Reporting device opened: id=0x%x, name=%s

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

Tags:Android 事件 处理

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