Android 10 |
您所在的位置:网站首页 › 鼠标中键键值 › Android 10 |
Android 10-13鼠标右键返回功能适配
文章目录
Android 10-13鼠标右键返回功能适配一、前言二、鼠标右键适配修改1、Android 10 以及更低版本2、Android11 或者更高版本三、总结1、鼠标右键返回功能修改主要代码2、标右键返回修改代码系统源码搜索3、其他
一、前言
Android 原生代码代码中接入usb鼠标,点击右键,一般默认是没有反应的。 如果要鼠标点击右键设置成返回功能,就要适配系统代码。 一般Android板子调试初期没有触摸的情况,适配鼠标右键,是对操作使用是带来较大方便的。 本文介绍不同版本的Android 鼠标右键返回功能适配。 二、鼠标右键适配修改 1、Android 10 以及更低版本Android 9、10 的修改位置: frameworks\native\services\inputflinger\InputReader.cpp uint32_t CursorButtonAccumulator::getButtonState() const { uint32_t result = 0; if (mBtnLeft) { result |= AMOTION_EVENT_BUTTON_PRIMARY; } // Mediatek Android Patch Begin // change the mouse key event, right->back, middle-> menu .... if (mBtnRight) { result |= AMOTION_EVENT_BUTTON_BACK; //右键返回功能 } if (mBtnMiddle) { result |= AMOTION_EVENT_BUTTON_MENU; //中间按键菜单功能 } 。。。 return result; } 2、Android11 或者更高版本Android 11或者更新的版本的修改位置: frameworks\native\services\inputflinger\reader\mapper\accumulator\CursorButtonAccumulator.cpp uint32_t CursorButtonAccumulator::getButtonState() const { uint32_t result = 0; if (mBtnLeft) { result |= AMOTION_EVENT_BUTTON_PRIMARY; } if (mBtnRight) { result |= AMOTION_EVENT_BUTTON_BACK;//change by liwenzhi } if (mBtnMiddle) { result |= AMOTION_EVENT_BUTTON_TERTIARY; } 。。 return result; }RK Android12 方案的修改: uint32_t CursorButtonAccumulator::getButtonState() const { uint32_t result = 0; if (mBtnLeft) { result |= AMOTION_EVENT_BUTTON_PRIMARY; } if (mBtnRight) { char targetProduct[PROPERTY_VALUE_MAX] = {0}; //根据属性值 ro.target.product,决定鼠标右键是否为回退功能。 property_get("ro.target.product", targetProduct, ""); if (strcmp(targetProduct, "box") == 0 || strcmp(targetProduct, "atv") == 0 ) { //在括号)前面加一个条件 || strcmp(targetProduct, "tablet") == 0 即可 result |= AMOTION_EVENT_BUTTON_BACK; } else { result |= AMOTION_EVENT_BUTTON_SECONDARY; } } ... }ro.target.product 属性大致是产品类型的意思,基本是固定的不会更改。 box 盒子,atv 电视机,tablet 平板, phone 手机 但是很多大屏设备其实是tablet 在rk方案设备获取ro.target.product属性可以得到验证: 130|rk3588_s_skg:/ $ getprop ro.target.product tabletrk 方案代码,加入上面判断逻辑,鼠标右键就会执行回退功能。 其实也可以自定义添加一个属性进行判断即可。 三、总结其实不管什么方案或者版本只需 getButtonState 在点击右键的情况返回的键值是 AMOTION_EVENT_BUTTON_BACK 就会执行返回功能。 1、鼠标右键返回功能修改主要代码路径: Android11 之前 frameworks\native\services\inputflinger\InputReader.cpp Android11及之后版本 frameworks\native\services\inputflinger\reader\mapper\accumulator\CursorButtonAccumulator.cpp 具体修改: CursorButtonAccumulator::getButtonState() const { if (mBtnRight) { result |= AMOTION_EVENT_BUTTON_BACK; } return result; } 2、标右键返回修改代码系统源码搜索看上面不管哪个版本的源码都是在 getButtonState 方法中进行鼠标按键适配即可。 所以全局/framework 遍历CursorButtonAccumulator::getButtonState() 关键字即可找到需要修改的地方。 可以使用命令:grep -nr “CursorButtonAccumulator::getButtonState()” release/framework$ grep -nr "CursorButtonAccumulator::getButtonState()" ./native/services/inputflinger/reader/mapper/accumulator/CursorButtonAccumulator.cpp:95:uint32_t CursorButtonAccumulator::getButtonState() const {或者 find . -name “*.cpp” | xargs grep “CursorButtonAccumulator::getButtonState()” release/frameworks$ find . -name "*.cpp" | xargs grep "CursorButtonAccumulator::getButtonState()" ./native/services/inputflinger/reader/mapper/accumulator/CursorButtonAccumulator.cpp:uint32_t CursorButtonAccumulator::getButtonState() const { release/frameworks$鼠标右键返回功能,基本是调试板初期获取大屏使用也有可能是特定需求,正常手机开发基本用不到。 3、其他屏蔽鼠标右键滑动事件,添加鼠标右键Menu功能: https://blog.csdn.net/u010664697/article/details/131071327 这个估计更少用,需要的可以参考。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |