Amdroid系统按键的重新映射

在我们系统开发的过程中经常遇到需要按键的一些功能,往往需要在启动中即可修改,在按键上报并将键值映射到上层。那么是否有其它方法进行修改呢,在这里提供一致修改按键上报的本地层也可以实现方法,具体如下:

如将两个按键的键值上报对调,如下:

frameworks\native\services\inputflinger\InputDispatcher.cpp 
修改点: 
void InputDispatcher::notifyKey(const NotifyKeyArgs* args) { 
…… …… 

java代码:
event.initialize(args->deviceId, args->source, args->action,  
            flags, keyCode, args->scanCode, metaState, 0,  
            args->downTime, args->eventTime);  
在这个代码之前加入:
int32_t keyCode = args->keyCode;  
    ALOGD("notifyKey keyCode=0x%x, ",args->keyCode);  
    char value[PROPERTY_VALUE_MAX];  
    property_get("persist.keychange.enable", value, "0");  
    if (!strcmp(value, "1")){  
        if (keyCode == 0x4){   
            keyCode=0xbb;  
            ALOGD("notifyKey keyCode=0x%x, ",keyCode);  
        }else if (keyCode == 0xbb){  
            keyCode=0x4;  
            ALOGD("notifyKey keyCode=0x%x, ",keyCode);  
        }   
    }  

通过属性persist.keychange.enable的读取,进行判断是否需要进行对调,如果默认的值为1,则进行对调,即将back的keyCode (0x4)跟app_switch的keyCode (0xbb)进行对调 
使用property_get需要引入头文件#include <cutils/properties.h> 
然后编译模块inputflinger。

而在系统开发中在

device\autochips\8227LGO_demo\system.prop中加入

persist.keychange.enable=1即可固定这个功能。

也可以将libinputflinger.so push到手机中system/lib64/下进行替换, 
设置属性persist.keychange.enable进行测试,测试OK之后再次将属性persist.keychange.enable=1固定到device\autochips\8227LGO_demo\system.prop中,进行全系统编译即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章