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

Android 事件处理流程

 2010-03-19 07:14:00 来源:WEB开发网   
核心提示:}for(i = 1; i < mFDCount; i++) {if(mFDs[i].revents) {LOGV("revents for %d = 0x%08x", i, mFDs[i].revents);if(mFDs[i].revents & POLLIN) {res = read(m

}

for(i = 1; i < mFDCount; i++) {

if(mFDs[i].revents) {

LOGV("revents for %d = 0x%08x", i, mFDs[i].revents);

if(mFDs[i].revents & POLLIN) {

res = read(mFDs[i].fd, &iev, sizeof(iev));

if (res == sizeof(iev)) {

LOGV("%s got: t0=%d, t1=%d, type=%d, code=%d, v=%d",

mDevices[i]->path.string(),

(int) iev.time.tv_sec, (int) iev.time.tv_usec,

iev.type, iev.code, iev.value);

*outDeviceId = mDevices[i]->id;

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

*outType = iev.type;

*outScancode = iev.code;

if (iev.type == EV_KEY) {

err = mDevices[i]->layoutMap->map(iev.code, outKeycode, outFlags);

LOGV("iev.code=%d outKeycode=%d outFlags=0x%08x err=%d ",

iev.code, *outKeycode, *outFlags, err);

if (err != 0) {

*outKeycode = 0;

*outFlags = 0;

}

} else {

*outKeycode = iev.code;

}

*outValue = iev.value;

*outWhen = s2ns(iev.time.tv_sec) + us2ns(iev.time.tv_usec);

return true;

} else {

if (res<0) {

LOGW("could not get event (errno=%d)", errno);

} else {

LOGE("could not get event (wrong size: %d)", res);

}

continue;

}

}

}

}

...

}

对于按键事件,调用mDevices[i]->layoutMap->map进行映射。映射实际是由 KeyLayoutMap::map完成的,KeyLayoutMap类里读取配置文件qwerty.kl,由配置 文件 qwerty.kl 决定键值的映射关系。你可以通过修 改./development/emulator/keymaps/qwerty.kl来改变键值的映射关系。

JNI 函数

在frameworks/base/services/jni /com_android_server_KeyInputQueue.cpp文 件中,向 JAVA提供了函数android_server_KeyInputQueue_readEvent,用于读 取输入设备事件。

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

Tags:Android 事件 处理

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