ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 添加蓝牙遥控按键

2021-10-21 19:59:57  阅读:547  来源: 互联网

标签:KeyEvent 蓝牙 添加 按键 input Android 遥控器


一. 蓝牙遥控器的原理

本文源码给予 amlogic 9.0
蓝牙遥控器的原理如下图
在这里插入图片描述

从流程上我们可以发现,我们遥控器的码值被转化了几次: HID码值–→Linux event–→ 根据Vendor、Product转化为Android事件。

二. 按键知识

适配可以发现,一些按键不可用,说明按键值为添加和适配。

通过 getevent 可以拿到其中一个按键的值:
**加粗样式
**

从上图可以知道

  • 名字:蓝牙遥控器的名字为 BT_Smart_RC001
  • 007004a :其中,高位为 usage page (07代表普通健,0c 代码多媒体健);低位为健值
  • 0066:表示down的值,这个后面需要在 kl 文件中,转换成十进制的值

三. 修改已有按键值

现象:BT_Smart_RC001 这个遥控器,按下Back 建,HOME 建不起作用。

先使用 getevent 按下Back健,拿到event 的值
在这里插入图片描述

这种通用的按键,在KeyEvent 是有的,我们要做的,就是修改 kl 的值即可。

使用 dumpsys input 拿到 kl 的位置:
在这里插入图片描述

可以看到 kl 在 Android 系统映射的位置,修改里面的值,0x9e 转成十进制为 158,同理拿到HOME的值,修改如下

在这里插入图片描述

修改后重启就发现已经起作用了。

四. 添加新的按键值

BT_Smart_RC001 有个按键0X59,我们想把它定义为新的健,所以需要走一遍按键添加流程;

5.1 添加键值和上层映射

去到 linux 映射表,hid-input.c ,位置在 common/drivers/hid/hid-input.c ,去到 HID_UP_CONSUMER 这个方法,把0x59 添加进去,并新增 KEY_SOURCE 这个字符串,后续给Android使用的
在这里插入图片描述

5.2 头文件中添加字符串

去到 common/include/uapi/linux/input-event-codes.h ,添加刚才的KEY_SOURCE,注意不要重复即可

在这里插入图片描述

5.3 framework 的 KeyCodes.h , InputEventLabels.h 和KeyEvent.java

去到 frameworks/native/include/android ,在 KeyCodes.h 增加刚才的SOURCE,注意不要重复即可
在这里插入图片描述

然后再去到 frameworks/native/include/input,修改 InputEventLabels.h,定义刚才的source

在这里插入图片描述

最后,再去到 frameworks/base/core/java/android/view , 修改给Android 上层使用的 KeyEvent.java 即可:
在这里插入图片描述

这里,我们的按键值,就从 linux 传到 KeyEvent.java 了。

五. PhoneWindowManager 添加按键功能

接下来就是处理自己的功能了,此时按键已经通过 onKeyEvent()拿到,如果你想全局处理,可以在 PhoneWindowManager 的

interceptKeyBeforeQueueing 方法添加功能,如:
在这里插入图片描述

这样,新建一个按键就完成了

标签:KeyEvent,蓝牙,添加,按键,input,Android,遥控器
来源: https://blog.csdn.net/u011418943/article/details/120893508

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有