美文网首页8.0Android开发半栈工程师
Android 8.0 (Oreo) 添加按键及键值

Android 8.0 (Oreo) 添加按键及键值

作者: CocoDoll | 来源:发表于2017-11-15 17:12 被阅读88次

    当手机外设增加物理按键(类似VOLUME_UP/ VOLUME_DOWN的按键),需要们去定义添加键值,提供给APP使用。

    前提:

    framework层添加前,要确定按键驱动是否调好:

    adb shell getevent

    /dev/input/event3: 0001 02fe 00000001

    /dev/input/event3: 0000 0000 00000000

    /dev/input/event3: 0001 02fe 00000000

    /dev/input/event3: 0000 0000 00000000

    其中02fe就是驱动上报的值,两次的1,0是指按下和弹起的动作。

    1. gpio-keys.kl

    gpio-keys.kl 这个文件对应的是定制机的kl 文件,不一定是这个名字,定义在 AndroidBoard.mk 中的: LOCAL_MODULE := gpio-keys.kl ,在手机中可以在/system/usr/keylayout 找到这个文件

    将驱动上报的02fe转为十进制的766, 并且定义:

    key 766     F14

    这样就完成了对物理按键kl文件的映射到“F14”

    2.framework native 中定义:

    /frameworks/native/include/android/keycodes.h

    AKEYCODE_F14 = 901

    /frameworks/native/include/input/InputEventLabels.h

    DEFINE_KEYCODE(F14)

    3. framework base下的定义:

    frameworks/base/core/java/android/view/KeyEvent.java:

    定义按键的keyCode 也就是 APP 在onKeyDown() 获取的keyCode

    public static final int KEYCODE_F14 = 901; // 注意APP获取的keyCode是901 不是766 

    frameworks/base/core/res/res/values/attrs.xml:

    <enum name="KEYCODE_F14" value="901"/>

    按照以往的经验来看,配置到这里编译运行,添加的按键应该可以生效了。但是在8.0上并非如此


    4.android O 需要添加:

    frameworks/base/data/keyboards/Generic.kl

    frameworks/base/data/keyboards/qwerty.kl

    key 766 F14

    完成这一步才会生效。

    键值最大767

    总结:android 8.0 在代码的编译上有很多变化,在6.0/7.0 的可以生效的设置往往会失效,这时候需要我们多研究了,因为很多版本上的差异官网也没有说清楚。

    相关文章

      网友评论

        本文标题:Android 8.0 (Oreo) 添加按键及键值

        本文链接:https://www.haomeiwen.com/subject/ormtjttx.html