本文主要是介绍Android7.1.1 remap鼠标右键为返回键,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
需求:客户需求当手机连接鼠标时,可以有开关控制鼠标右键的行为的按钮,打开鼠标右键就为返回键,关闭保持原来行为。如果只是将右键改为返回键还是很好做的,找到点击右键的事件改一下就行,但是现在还需要控制,就涉及到交互的问题了。先看效果图。
追踪代码到InputReader.cpp文件,位置frameworks/native/services/inputflinger/InputReader.cpp。熟悉android事件输入的朋友可能对该文件很了解,InputReader主要功能是处理EventHub传过来的事件,然后加工,再分发给各个InputDispatcher。其中对鼠标事件处理的方法如下:
uint32_t CursorButtonAccumulator::getButtonState() const {uint32_t result = 0;if (mBtnLeft) {result |= AMOTION_EVENT_BUTTON_PRIMARY;}if (mBtnRight) {//右键事件result |= AMOTION_EVENT_BUTTON_SECONDARY;}if (mBtnMiddle) {result |= AMOTION_EVENT_BUTTON_TERTIARY;}if (mBtnBack || mBtnSide) {result |= AMOTION_EVENT_BUTTON_BACK;}if (mBtnForward || mBtnExtra) {result |= AMOTION_EVENT_BUTTON_FORWARD;}return result;
}
通过加log找到右键事件处理的地方,需要做的就是将其改为返回键,可是这段代码是在native层,如何被上层的apk控制呢,也需你可以想到jni的方式,不过感觉太麻烦了。两边需要通信,为何不找一个媒介做一个配置属性,上层设置这个属性,native层读取。property就是一个很好的媒介,两边都可以操纵。动手加起来。
首先在system.prop中添加一个prop属性:persist.sys.mouse.right.back=false
上层按钮修改其值,按钮是一个preference:
@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {if(preference.getKey().equals(KEY_SET_MOUSE)){String newStrValue = (boolean)newValue ? "true" : "false";SystemProperties.set("persist.sys.mouse.right.back", newStrValue);}}
接下来修改InputReader.cpp代码,在右键事件地方添加代码:
uint32_t CursorButtonAccumulator::getButtonState() const {uint32_t result = 0;if (mBtnLeft) {result |= AMOTION_EVENT_BUTTON_PRIMARY;}if (mBtnRight) {char model[10];__system_property_get("ro.product.model", model);char remapback[10];__system_property_get("persist.sys.mouse.right.back", remapback);if(strcmp(remapback,"true") == 0){result |= AMOTION_EVENT_BUTTON_BACK;}else{result |= AMOTION_EVENT_BUTTON_SECONDARY;}}}if (mBtnMiddle) {result |= AMOTION_EVENT_BUTTON_TERTIARY;}if (mBtnBack || mBtnSide) {result |= AMOTION_EVENT_BUTTON_BACK;}if (mBtnForward || mBtnExtra) {result |= AMOTION_EVENT_BUTTON_FORWARD;}return result;
}
C++中要使用prop要记得先添加 #include <sys/system_properties.h>
主要就是改result |= AMOTION_EVENT_BUTTON_BACK; 这样分发出去的右键事件就成
返回键了。
第一次写技术博客,很多不足还请多多包涵。
这篇关于Android7.1.1 remap鼠标右键为返回键的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!