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

综合技术 2017-11-15

当手机外设增加物理按键(类似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:

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

4.android O 需要添加:

frameworks/base/data/keyboards/Generic.kl

frameworks/base/data/keyboards/qwerty.kl

key 766 F14

完成这一步才会生效。

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

简书

责编内容by:简书 (源链)。感谢您的支持!

您可能感兴趣的

手撸一个Android柱形图和线型图的组合图表... 项目开发中经常用到统计图表,网上也有很多的图表类库,比如 :MPAndroidChart,XCL-chart,hellochart,AChartEngine等等...
Sending HTTP requests to the server from the backg... I'm sending HTTP requests to server from working in background Service in Androi...
利用全局style,去除Android5.0以上Button自带阴影的效果... 故事背景 从前,有一个可爱、帅气、酷似吴彦祖的猿猿先生,根据公司的要求,一个多月的时间去重构项目。 时光荏苒,机智的猿猿先生三下五除二就完成了项目...
Android下的skia编译和使用 概述: Skia是google的一个跨平台图形库,google自家的android系统、chrome浏览器、最新的fuchsia系统以及最新的flut...
59. (android开发)SQLite数据库操作 SQLite数据库是一款轻型的数据库,在很多嵌入式产品中使用。它占用的资源非常低,只需要几百K内存就足够了。 对windows/linux/unix等多种操...