`

实现返回键(back)和任务管理键(app_switch)功能的调换

阅读更多
近期有一个需求在不同的国家操作习惯不一样,需要将back键和app_switch键的功能调换
最初的想法.在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进行测试即可
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics