android4.0增加遥控器按键步骤

本文详细介绍了如何在特定设备中配置并集成遥控器物理按键,包括增加按键、更新映射关系、调整API和执行相关编译流程,确保应用能够正确识别并使用新增按键。

1、ir_keyboard.h增加物理键值。

      遥控器的物理键值可以通过在IR_Keypad_IntIsr函数里面(ir_keyboard.c)

      打印IR_Keypad_GetValue的返回值,这个地方属于内核打印,直接使用printk打印不出来,需要提高级别

      printk("0""print str");这样就能够打印出来了。

2、在ir_keyboard.c数组里面Key_Code,增加遥控器和物理键值的对应,这个在input.h里面,针对特殊的遥控器,有可能需要自己手动添加input里面没有的码值。

      比如新增一个  mute  0x1bf

3、修改device\hisilicon\godbox\prebuilt下的

     Vendor_0001_Product_0001

    在这个文件里面需要将我们增加的mute 0x1bf = 447 添加这样一行

    key  447  MUTE    这样在对应于这个key的名称就是KEYCODE_MUTE

4、修改framework/base/core/res/res/values/attrs.xml

     <enum name="KEYCODE_MUTE " value="12" /> 这个地方的value值是java应用层获取到的values值。

5、 修改framework/base/core/java/android/view/keyevent.java

      这里面需要修改2个地方。

    <1>

     一个是LAST_KEYCODE,之前添加如下,

        public static final int KEYCODE_MUTE         = 12;

       如果KEYCODE_MUTE是最后一个,让LAST_KEYCODE = KEYCODE_MUTE

  <2>

     SparseArray<String> names = KEYCODE_SYMBOLIC_NAMES;最后面增加

      names.append(KEYCODE_MUTE,"KEYCODE_MUTE");

     好像应用会在这个数组里面进行查找的。之前我这个地方没加,执行了make update-api之后,current.txt始终找不到这个按键,并且应用也获取不到这个按键。

6、确保以上修改的都是正确的,对应关系弄对了

     在根目录下,执行make update-api 这个地方会把java的一些全局变量进行规整,写到current.txt里面去,2.2上是current.xml。

     执行完毕,可以检查 current.txt文件是否包含了,这个文件在framework/base/api下面

field public static final int KEYCODE_MUTE = 12; // 0xc

如果不包含,说明以上步骤没执行对。再仔细看看。

7、执行完make update-api之后,检查current.txt是ok的,

     执行全部编译,这个地方不知道修改了哪里,索性全部编译了。

    编译出错了

   frameworks/base/api/15.txt:22233: error 10: Removed field android.view.KeyEvent.KEYCODE_CALCULATOR
frameworks/base/api/15.txt:22311: error 10: Removed field android.view.KeyEvent.KEYCODE_MUSIC
target Java: filterfw (out/target/common/obj/JAVA_LIBRARIES/filterfw_intermediates/classes)


******************************
You have tried to change the API from what has been previously released in
an SDK.  Please fix the errors listed above.
******************************

因为去掉了2个按键,而这里还有映射的原因。

这2个按键应用映射的键值正好和我定义的冲突,我就去掉了keyevent 数组以及常量的地方。

再加上。应用有的地方用到了。使用方法是KeyEvent.KEYCODE_MUSIC,所以修改了常量值应该不影响使用的。

重新编译。

o,我的老天

out/target/common/obj/PACKAGING/public_api.txt:22549: error 17: Field android.view.KeyEvent.KEYCODE_CALCULATOR has changed value from 210 to 1178
out/target/common/obj/PACKAGING/public_api.txt:22636: error 17: Field android.view.KeyEvent.KEYCODE_MUSIC has changed value from 209 to 1177


******************************
You have tried to change the API from what has been previously released in
an SDK.  Please fix the errors listed above.
******************************

还是提示错误,不让修改这个怎么办呢?哦,修改了之后没有执行make update-api

还是不对。网上找了半天

自己找到了在framework/base/api 下有n(n取决于你源码的版本,如果你源码的版本是2.1 ,那么就 有分别以 1~ 7命名的xml,就是api level)个xml文档,分别对应android api 的不同版本。   在这些xml中,把你在framework层中修改的地方对应进去。 如我这个错误的地方,在8.xml 和 current.xml 中找到“FLAG_SHOW_LIGHTS”,把里面的value 值改成和你代码中值一致就可以了。

改了试试


补充:

编译ok了,但是应用上还是获取不到我新加的键

0KeyEvent

0KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_UNKNOWN, scanCode=398, metaState=0, flags=0x8, repeatCount=0, eventTime=325956, downTime=325956, deviceId=4, source=0x501 }

scanCode 是对的,但是keyCode 不对,为啥?

### 如何在Android设备上使用红外遥控器按键 为了实现在Android设备上使用红外遥控器按键的功能,需遵循一系列特定的操作流程来确保红外遥控信号能够被正确识别和处理。对于支持红外接收功能的Android设备而言,其工作原理涉及多个层面的技术细节。 #### 设备树配置与使能红外遥控功能 要让Android设备具备响应来自红外遥控器指令的能力,首先需要对设备树进行适当配置以使能红外遥控的支持[^2]。这一步骤至关重要,因为只有当底层硬件资源得到正确定义之后,后续更高层次上的应用逻辑才能正常运作。 #### 获取并解析红外遥控数据 一旦完成了初步设置,则可以通过开启调试模式下的日志记录选项(如打开红外打印功能),从而捕获到来自于远程控制器发送过来的数据包内容——即所谓的用户码以及值信息。这些信息随后会被用来更新对应的设备树节点及盘布局文件(.kl),以便操作系统可以理解每一个接收到的命令所代表的具体含义。 #### 盘映射文件(KL 文件)的作用 在完成上述准备工作以后,还需要创建或修改现有的KL文件来建立物理按键事件同应用程序内部操作之间的联系。通过这种方式指定某个特定组合下产生的扫描码应当触发哪类行为反应,例如启动相机应用或是调整音量大小等动作。值得注意的是,在实际编写过程中可能遇到各种各样的挑战,比如新加入的定义无法生效等问题;这时就需要仔细检查整个链条中的各个环节是否存在疏漏之处了。 #### 实现自定义按键功能 最后,若希望进一步扩展系统的交互能力,还可以考虑利用PhoneWindowManager.java这样的核心组件去实现更加个性化的控制方案。这意味着不仅可以简单地重定向标准输入流至预设的目标位置,而且有机会创造出全新的用户体验形式,诸如执行截图之类的实用特性均在此列[^5]。 ```java // PhoneWindowManager.java 示例片段 public void interceptKeyBeforeQueueing(KeyEvent event, int policyFlags){ final int keyCode = event.getKeyCode(); switch (keyCode){ case KeyEvent.KEYCODE_VOLUME_UP: // 处理音量加按钮按下事件 break; case KeyEvent.KEYCODE_CAMERA: // 执行拍照或其他关联任务 takePhotoOrPerformRelatedAction(); break; default: super.interceptKeyBeforeQueueing(event, policyFlags); } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值