需求:客户需求当手机连接鼠标时,可以有开关控制鼠标右键的行为的按钮,打开鼠标右键就为返回键,关闭保持原来行为。如果只是将右键改为返回键还是很好做的,找到点击右键的事件改一下就行,但是现在还需要控制,就涉及到交互的问题了。先看效果图。


追踪代码到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鼠标右键为返回键相关推荐

  1. 用键盘实现鼠标右键和中键功能

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇为虚拟机操作系统自定义键盘中,我们知道了如何创建一个自定义键盘配置文件或编辑现有的配置文件.现在一起来看看在Mac虚拟 ...

  2. Android 11.0 12.0USB鼠标右键改成返回键

    1.概述 在11.0 12.0设备定制化开发中,产品有好几个usb口,用来可以连接外设,所以USB鼠标通过usb口来控制设 备也是常见的问题,在window系统中,鼠标右键是返回键的功能,可是andr ...

  3. java vk减号_[原]在全局鼠标钩子中模拟鼠标右键单击

    //bSwap:BOOL型 //为TRUE为切换左右键功能,为FALSE为恢复原左右键功能 ::SwapMouseButton(bSwap); 可以使用RegisterHotKey()注册一个热键,在 ...

  4. android 11鼠标右键返回功能(已验证)

    android 11鼠标右键返回功能 android 11 鼠标右键返回功能的修改位置和android10,android9不一致,修改如下. 基于RK3568 官方SDK验证. frameworks ...

  5. android9/android10 鼠标右键返回(已验证)

    android10 鼠标右键返回 基于RK3399 官方SDK验证. android9和android10的修改方法一致,和android11的修改位置不同. 具体修改如下: frameworks/n ...

  6. MTK6757的OTG线连接鼠标后,鼠标右键改为返回功能

    找到如下路径: \frameworks\native\services\inputflinger\InputReader.cpp 找到如下函数: uint32_t CursorButtonAccumu ...

  7. Android 9.0 10.0 USB鼠标右键改成返回键

    1.概述 在10.0系统Tv设备开发中,USB鼠标通过usb口来控制设备也是常见的问题,可是原生的系统 鼠标右键不是返回键 根据客户需要修改成右键就需要跟代码了, 功能分析: InputReader ...

  8. JQuery模拟网页中自定义鼠标右键菜单

    题外话.......最近在开发一个网站项目的时候,需要用到网页自定义右键菜单,在网上看了各路前辈大神的操作,头晕目眩,为了达到目的,突然灵机一动,于是便有了这篇文章. 先放个效果图(沾沾自喜,大神勿喷 ...

  9. openlayer右键菜单_使用OpenLayers3 添加地图鼠标右键菜单

    添加右键菜单,首先我们要监听鼠标右键点击的操作,我们知道鼠标右键事件名是 contextmenu,当鼠标在 html 元素之上,点击鼠标右键,便会触发 contextmenu 事件,在 context ...

最新文章

  1. python绘图实例-Python使用matplotlib简单绘图示例
  2. 【直播资料下载】Python 系列直播——深入Python与日志服务,玩转大规模数据分析处理实战第二讲...
  3. IT民工——全世界最齐全的条形码库!包括Code128/Code93/Code39/EAN13等22种条形码
  4. C#设计模式(7)-Singleton Pattern
  5. 阿里P8架构师谈:高并发网站的监控系统选型、比较、核心监控指标
  6. 作者:周一懋(1982-),男,江苏汇誉通数据科技有限公司大数据事业部总监、工程师...
  7. liferay 指定默认首页
  8. 十九.激光和惯导LIO-SLAM框架学习之项目工程代码介绍---代码框架和一些文件解释
  9. Mac更新之后使用终端提示:The default interactive shell is now zsh.
  10. JSTL-格式标签库
  11. 文件打开对话框设定过滤
  12. 递归加载无限级分类,虽然我觉得效率不太好。
  13. 高级商务办公软件应用【1】
  14. 教师使用计算机的能力提升,河南省中小学教师信息技术应用能力提升工程实效研究...
  15. H5移动端rem转成rpx
  16. Quoted-printable编码的介绍和quopri库的使用
  17. 模式匹配与正则表达式(一)
  18. 大数据环境下,征信,真的那么美好吗?
  19. 网上报修系统java源码_网上报修系统管理软件
  20. C#垃圾回收机制GC

热门文章

  1. php不显示notice,解决PHP显示Warning和Notice等问题
  2. Hbase(nosql)体系结构有基本操作 笔记八
  3. 一文带你了解步进电机的相关知识:相、线、极性和步进方式
  4. android qq登录分析,Android第三方登录之QQ登录
  5. charles windows 和苹果手机进行连接抓包
  6. 关闭苹果无线服务器,苹果iOS11 WiFi、蓝牙无法关闭怎么回事?附彻底关闭方法...
  7. 请说说自己对鲁迅本人他作品的了解计算机,26 回忆鲁迅先生课堂实录及点评
  8. 5g通用模组是什么_GTI 5G通用模组计划正式启动了吗? 联想将重点发展5G是什么?...
  9. 设计模式之模板方法模式详解
  10. linux 无线网络连接不上网,linux无法连接wifi,不显示wifi