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