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

63 篇文章 0 订阅
21 篇文章 0 订阅

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 不对,为啥?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值