首先来到了

void KeyboardInputMapper::process(const RawEvent* rawEvent) {
    switch (rawEvent->type) {
    case EV_KEY: {
        int32_t scanCode = rawEvent->code;
        int32_t usageCode = mCurrentHidUsage;
        mCurrentHidUsage = 0;
ALOGD("matt-KeyboardInputMapper::process-scanCode=%d  ,%d ",scanCode,usageCode);
        if (isKeyboardOrGamepadKey(scanCode)) {      //双击灭屏的时候过不了这一关,所以双击灭屏是更上层做的
            processKey(rawEvent->when, rawEvent->value != 0, scanCode, usageCode);
        }
        break;
    }
}

status_t KeyLayoutMap::mapKey(int32_t scanCode, int32_t usageCode,
        int32_t* outKeyCode, uint32_t* outFlags) const {


   ALOGD("matt-mapKey11: scanCode=%d, usageCode=0x%08x ~ Result keyCode=%d, outFlags=0x%08x.",
            scanCode, usageCode, *outKeyCode, *outFlags);
    const Key* key = getKey(scanCode, usageCode);
    if (!key) {
#if DEBUG_MAPPING
        ALOGD("matt-mapKey: scanCode=%d, usageCode=0x%08x ~ Failed.", scanCode, usageCode);
#endif
        *outKeyCode = AKEYCODE_UNKNOWN;
        *outFlags = 0;
        return NAME_NOT_FOUND;
    }
ALOGD("matt-mapKey:  key->keyCode=%d ", key->keyCode);


    *outKeyCode = key->keyCode;
    *outFlags = key->flags;


#if DEBUG_MAPPING
    ALOGD("matt-mapKey: scanCode=%d, usageCode=0x%08x ~ Result keyCode=%d, outFlags=0x%08x.",
            scanCode, usageCode, *outKeyCode, *outFlags);
#endif
    return NO_ERROR;
}


const KeyLayoutMap::Key* KeyLayoutMap::getKey(int32_t scanCode, int32_t usageCode) const {
    if (usageCode) {
        ssize_t index = mKeysByUsageCode.indexOfKey(usageCode);
        if (index >= 0) {
            return &mKeysByUsageCode.valueAt(index);
        }
    }
    if (scanCode) {
        ssize_t index = mKeysByScanCode.indexOfKey(scanCode);   //这里有妖额子
  ALOGD("matt-mapKey: index=%d",index); //最奇怪的就是同样的进来,却是不同的结果
        if (index >= 0) {
            return &mKeysByScanCode.valueAt(index);
        }
    }
    return NULL;
}



双击之后的log:

01-01 10:57:47.389  1687  2444 D InputReader: matt-KeyboardInputMapper::process-scanCode=116  ,0 
01-01 10:57:47.390  1687  2444 D EventHub: matt- EventHub::mapKey
01-01 10:57:47.390  1687  2444 D EventHub: matt- EventHub::mapKey1
01-01 10:57:47.390  1687  2444 D KeyLayoutMap: matt-mapKey11: scanCode=116, usageCode=0x00000000 ~ Result keyCode=0, outFlags=0x00000055.
01-01 10:57:47.390  1687  2444 D KeyLayoutMap: matt-mapKey: index=7
01-01 10:57:47.390  1687  2444 D KeyLayoutMap: matt-mapKey:  key->keyCode=820 
01-01 10:57:47.390  1687  2444 D KeyLayoutMap: matt-mapKey: scanCode=116, usageCode=0x00000000 ~ Result keyCode=820, outFlags=0x00000003.
01-01 10:57:47.390  1687  2444 D EventHub: matt- EventHub::mapKey2
01-01 10:57:47.390  1687  2444 D EventHub: matt- EventHub::mapKey3
01-01 10:57:47.390  1687  2444 D InputReader: matt-processKey keyCode=820 
01-01 10:57:47.390  1687  2444 D InputReader: matt-processKey keyCode2=820 
01-01 10:57:47.390  1687  2444 D InputReader: matt-KeyboardInputMapper::process-scanCode=116  ,0 
01-01 10:57:47.390  1687  2444 D EventHub: matt- EventHub::mapKey
01-01 10:57:47.390  1687  2444 D EventHub: matt- EventHub::mapKey1
01-01 10:57:47.390  1687  2444 D KeyLayoutMap: matt-mapKey11: scanCode=116, usageCode=0x00000000 ~ Result keyCode=0, outFlags=0x00000055.
01-01 10:57:47.390  1687  2444 D KeyLayoutMap: matt-mapKey: index=7
01-01 10:57:47.390  1687  2444 D KeyLayoutMap: matt-mapKey:  key->keyCode=820 
01-01 10:57:47.390  1687  2444 D KeyLayoutMap: matt-mapKey: scanCode=116, usageCode=0x00000000 ~ Result keyCode=820, outFlags=0x00000003.
01-01 10:57:47.390  1687  2444 D EventHub: matt- EventHub::mapKey2
01-01 10:57:47.390  1687  2444 D EventHub: matt- EventHub::mapKey3
01-01 10:57:47.390  1687  2444 D InputReader: matt-processKey keyCode=820 
01-01 10:57:47.390  1687  2444 D InputReader: matt-processKey keyCode4-=820 
01-01 10:57:47.390  1687  2444 D InputReader: matt-processKey keyCode4=820 

按下真正的power key的log:

01-01 10:58:21.011  1687  2444 D InputReader: matt-KeyboardInputMapper::process-scanCode=116  ,0 
01-01 10:58:21.011  1687  2444 D EventHub: matt- EventHub::mapKey
01-01 10:58:21.011  1687  2444 D EventHub: matt- EventHub::mapKey1
01-01 10:58:21.011  1687  2444 D KeyLayoutMap: matt-mapKey11: scanCode=116, usageCode=0x00000000 ~ Result keyCode=0, outFlags=0x00000055.
01-01 10:58:21.011  1687  2444 D KeyLayoutMap: matt-mapKey: index=110
01-01 10:58:21.011  1687  2444 D KeyLayoutMap: matt-mapKey:  key->keyCode=26 
01-01 10:58:21.011  1687  2444 D KeyLayoutMap: matt-mapKey: scanCode=116, usageCode=0x00000000 ~ Result keyCode=26, outFlags=0x00000000.
01-01 10:58:21.011  1687  2444 D EventHub: matt- EventHub::mapKey2
01-01 10:58:21.011  1687  2444 D EventHub: matt- EventHub::mapKey3
01-01 10:58:21.011  1687  2444 D InputReader: matt-processKey keyCode=26 
01-01 10:58:21.011  1687  2444 D InputReader: matt-processKey keyCode2=26 
01-01 10:58:21.128  1687  2444 D InputReader: matt-KeyboardInputMapper::process-scanCode=116  ,0 
01-01 10:58:21.128  1687  2444 D EventHub: matt- EventHub::mapKey
01-01 10:58:21.128  1687  2444 D EventHub: matt- EventHub::mapKey1
01-01 10:58:21.128  1687  2444 D KeyLayoutMap: matt-mapKey11: scanCode=116, usageCode=0x00000000 ~ Result keyCode=0, outFlags=0x00000055.
01-01 10:58:21.128  1687  2444 D KeyLayoutMap: matt-mapKey: index=110
01-01 10:58:21.128  1687  2444 D KeyLayoutMap: matt-mapKey:  key->keyCode=26 
01-01 10:58:21.128  1687  2444 D KeyLayoutMap: matt-mapKey: scanCode=116, usageCode=0x00000000 ~ Result keyCode=26, outFlags=0x00000000.
01-01 10:58:21.128  1687  2444 D EventHub: matt- EventHub::mapKey2
01-01 10:58:21.128  1687  2444 D EventHub: matt- EventHub::mapKey3
01-01 10:58:21.128  1687  2444 D InputReader: matt-processKey keyCode=26 
01-01 10:58:21.128  1687  2444 D InputReader: matt-processKey keyCode4-=26 
01-01 10:58:21.128  1687  2444 D InputReader: matt-processKey keyCode4=26 


哪怕到了inputdispatch里还算不同的keycode,到mLooper->wake();为止都是

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. 美食家App开发日记1
  2. 提高 Android(安卓)代码质量的4个工具
  3. android studio 获取SHA1(指纹)
  4. Android(安卓)https ssl证书配置(使用okht
  5. Android(安卓)OpenGL ES学习笔记之绘制点
  6. 我把阿里、腾讯、字节跳动、美团等Androi
  7. Android(安卓)实现用户列表信息的功能,然
  8. 物联网温湿度显示控制项目(网页、Android
  9. Android--多线程之Handler
  10. 【Android】Android中使用JNI调用底层C++