在我們系統開發的過程中經常遇到需要按鍵的一些功能,往往需要在啓動中即可修改,在按鍵上報並將鍵值映射到上層。那麼是否有其它方法進行修改呢,在這裏提供一致修改按鍵上報的本地層也可以實現方法,具體如下:
如將兩個按鍵的鍵值上報對調,如下:
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中,進行全系統編譯即可。