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中,進行全系統編譯即可。

 

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