实现返回键(back)和任务管理键(app_switch)功能的调换 博客分类: Android Android
程序员文章站
2024-03-02 10:29:46
...
近期有一个需求在不同的国家操作习惯不一样,需要将back键和app_switch键的功能调换
最初的想法.在PhoneWindowManager中的interceptKeyBeforeDispatching中处理按键分发的过程中实现,但是这里的时机比较晚,而且这里没有对返回键的处理,在这里实现改动量可能比较大
后来想到一处比较早的时机,在底层往上层上报的时候将按键对应keyCode进行对调即可。修改代码位置:
frameworks\native\services\inputflinger\InputDispatcher.cpp
修改点:
void InputDispatcher::notifyKey(const NotifyKeyArgs* args) {
…… ……
}
在
之前加如下:
通过属性persist.keychange.enable的读取,进行判断是否需要进行对调,如果默认的值为1,则进行对调,即将back的keyCode (0x4)跟app_switch的keyCode (0xbb)进行对调
使用property_get需要引入头文件#include <cutils/properties.h>
然后编译模块inputflinger,即可编完以后将libinputflinger.so
push到手机中system/lib64/下进行替换,
设置属性persist.keychange.enable进行测试即可
最初的想法.在PhoneWindowManager中的interceptKeyBeforeDispatching中处理按键分发的过程中实现,但是这里的时机比较晚,而且这里没有对返回键的处理,在这里实现改动量可能比较大
后来想到一处比较早的时机,在底层往上层上报的时候将按键对应keyCode进行对调即可。修改代码位置:
frameworks\native\services\inputflinger\InputDispatcher.cpp
修改点:
void InputDispatcher::notifyKey(const NotifyKeyArgs* args) {
…… ……
}
在
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,即可编完以后将libinputflinger.so
push到手机中system/lib64/下进行替换,
设置属性persist.keychange.enable进行测试即可