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