Android下添加新的自定义键值和按键处理流程
16lz
2021-01-23
Android下添加新的自定义键值和按键处理流程
说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我一个问题,请你详细描述一下怎么在Android下添加自定义键值和详细描述下Android的按键处理流程。现在回想起来当时回答的确实不是很好,乘着现在比较空闲的时机就来分析下上述的两个问题。
首先分析下Android下怎么添加新的自定义键值。在Android的原生系统中键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢? 在介绍Android怎么添加新的键值以前先介绍下Android下INPUT子系统FLOW的流程,下面就是精简的流程图示意图:
1.添加按键及其映射 1)如果系统有新的按键需要添加,玛门是怎么添加并上报到系统上层去的呢(这里的上层主要指的是Android应用层),首先要确定的是我们的遥控设备是通过/dev/input目录下那个event调用那个kl文件,这里可以通过如下命令超看cat /proc/bus/input/devices,下面是在终端下的打印信息
通过打印信息我们可以知道,我们的终端设备使用的是Vendor_3697_Product_0001.kl文件,我这里只分析IT遥控设备,那我们的Vendor_3697_Product_0001.kl里面又是啥呢,我们可以通过cat命令查看,具体的信息如下:
2)在Vendor_3697_Product_0001.kl文件中添加映射 key 123 WLS 说明: key-- 是关键字。固定值,不需要改变。
123-- 该按键在linux驱动中对应的键值,我在这里只是假设的这个值,至于具体对应的是那个可以查看“include/linux/input.h”
WLS-- 123按键映射到Android中的按键,它对应是“KeycodeLabels.h”文件中的KEYCODES表格元素的“literal”值。
其中KeycodeLabels.h的定义如下,我们可以在"MSTAR_PVR_BROWSER", 319后面添加我们需要向Android上层抛的键值,我们这里定义为"WLS", 320,所以当Android上层监听到320的按键值是就是我们新添加的键值了。
3)在/frameworks/native/include/android/keycodes.h中添加如下的 AKEYCODE_MSTAR_WLS = 320,下面看下该文件的定义
4)在frameworks/base/core/res/res/values/attrs.xml添加如下
<enum name="KEYCODE_WLS" value="320" />
5)在frameworks/base/core/java/android/view/KeyEvent.java添加对应的 public static final int KEYCODE_WLS = 320;
经过如上的步骤就将"123"按键和Android系统中的KEYCODE_WLS就对应起来了,注意这里的"123“键值并不是真正意义上的123键值,他只是linux驱动向上层抛出的键值。
6)在Android的framework层的键值处理函数中,捕获按键,并进行相应处理。
在framework层的input系统中,加入对wifi按键的捕获。
添加的文件是:frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
添加的具体方法:在PhoneWindowManager.java的interceptKeyBeforeQueueing()函数中,不惑该键值,至于怎么处理处决您的业务处理了。
在这里再总结下我对Android键值处理的理解,我的理解:看了一下key character map的处理,是通过读取kl文件然后使用驱动程序提供的ioctl函数去修改来自输入设备的扫描码和系统预定义的keycode的映射关系。 这样的话,对于硬件扫描码,只需要修改这个kl文件。上层得到的都是系统预定义的keycode。
重要补充:
映射关系: ir硬件扫描码在驱动里面被 映射为 kernel/include/linux/input.h里面定义的某个键值。但是这个键值只在linux系统中使用。
Android通过源码目录下的device/xxx/xxx.kl( keylayout )文件完成linux键值到Android系统要使用的键值的映射
说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我一个问题,请你详细描述一下怎么在Android下添加自定义键值和详细描述下Android的按键处理流程。现在回想起来当时回答的确实不是很好,乘着现在比较空闲的时机就来分析下上述的两个问题。
首先分析下Android下怎么添加新的自定义键值。在Android的原生系统中键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢? 在介绍Android怎么添加新的键值以前先介绍下Android下INPUT子系统FLOW的流程,下面就是精简的流程图示意图:
1.添加按键及其映射 1)如果系统有新的按键需要添加,玛门是怎么添加并上报到系统上层去的呢(这里的上层主要指的是Android应用层),首先要确定的是我们的遥控设备是通过/dev/input目录下那个event调用那个kl文件,这里可以通过如下命令超看cat /proc/bus/input/devices,下面是在终端下的打印信息
<span style="font-family:FangSong_GB2312;font-size:18px;">shell@orange:/ # cat /proc/bus/input/devices I: Bus=0018 Vendor=3697 Product=0001 Version=0001N: Name="MStar Smart TV IR Receiver"P: Phys=/dev/irS: Sysfs=/devices/virtual/rc/rc0/input0U: Uniq=H: Handlers=kbd event0 B: PROP=0B: EV=13B: KEY=fc0000 0 fc900 142851 0 0 0 0 108000 1a8 c0000c01 9e37c0 48007 f8000000 10000ffcB: MSC=10I: Bus=0000 Vendor=0000 Product=0000 Version=0000N: Name="MCE IR Keyboard/Mouse (ir)"P: Phys=/input0S: Sysfs=/devices/virtual/input/input1U: Uniq=H: Handlers=kbd mouse0 event1 B: PROP=0B: EV=100017B: KEY=30000 0 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffeB: REL=3B: MSC=10shell@orange:/ # shell@orange:/ # </span>
通过打印信息我们可以知道,我们的终端设备使用的是Vendor_3697_Product_0001.kl文件,我这里只分析IT遥控设备,那我们的Vendor_3697_Product_0001.kl里面又是啥呢,我们可以通过cat命令查看,具体的信息如下:
<span style="font-family:FangSong_GB2312;font-size:18px;"># Copyright (C) 2010 The Android Open Source Project## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.## MStar Smart TV IR Receiver.#key 116 POWER WAKEkey 11 0key 2 1key 3 2key 4 3key 5 4key 6 5key 7 6key 8 7key 9 8key 10 9key 398 PROG_REDkey 399 PROG_GREENkey 400 PROG_YELLOWkey 401 PROG_BLUEkey 103 DPAD_UPkey 108 DPAD_DOWNkey 105 DPAD_LEFTkey 106 DPAD_RIGHTkey 28 ENTERkey 402 CHANNEL_UP WAKE_DROPPEDkey 403 CHANNEL_DOWN WAKE_DROPPEDkey 115 VOLUME_UP WAKE_DROPPEDkey 114 VOLUME_DOWN WAKE_DROPPEDkey 104 PAGE_UPkey 109 PAGE_DOWNkey 102 HOME WAKE_DROPPEDkey 139 MENU WAKE_DROPPEDkey 158 BACKkey 113 VOLUME_MUTEkey 167 DVRkey 138 GUIDEkey 358 INFO#key 82 WINDOW#key 79 TV_INPUTkey 168 MEDIA_REWINDkey 159 MEDIA_FAST_FORWARDkey 165 MEDIA_PREVIOUSkey 163 MEDIA_NEXTkey 207 MEDIA_PLAYkey 119 MEDIA_PAUSEkey 128 MEDIA_STOP# Common extendedkey 392 SOUND_MODEkey 212 PICTURE_MODEkey 372 ASPECT_RATIOkey 363 CHANNEL_RETURNkey 142 SLEEPkey 365 EPGkey 395 LIST#key 370 SUBTITLEkey 466 MTSkey 467 FREEZEkey 468 TTXkey 469 CCkey 470 TV_SETTINGkey 471 SCREENSHOTkey 356 TV_POWER# Mstar extendedkey 59 MSTAR_BALANCEkey 60 MSTAR_INDEXkey 61 MSTAR_HOLDkey 62 MSTAR_UPDATEkey 63 MSTAR_REVEALkey 64 MSTAR_SUBCODEkey 65 MSTAR_SIZEkey 66 MSTAR_CLOCK</span>
2)在Vendor_3697_Product_0001.kl文件中添加映射 key 123 WLS 说明: key-- 是关键字。固定值,不需要改变。
123-- 该按键在linux驱动中对应的键值,我在这里只是假设的这个值,至于具体对应的是那个可以查看“include/linux/input.h”
WLS-- 123按键映射到Android中的按键,它对应是“KeycodeLabels.h”文件中的KEYCODES表格元素的“literal”值。
其中KeycodeLabels.h的定义如下,我们可以在"MSTAR_PVR_BROWSER", 319后面添加我们需要向Android上层抛的键值,我们这里定义为"WLS", 320,所以当Android上层监听到320的按键值是就是我们新添加的键值了。
<span style="font-family:FangSong_GB2312;font-size:18px;">/** Copyright (C) 2008 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/#ifndef _LIBINPUT_KEYCODE_LABELS_H#define _LIBINPUT_KEYCODE_LABELS_H#include <android/keycodes.h>struct KeycodeLabel { const char *literal; int value;};static const KeycodeLabel KEYCODES[] = { { "SOFT_LEFT", 1 }, { "SOFT_RIGHT", 2 }, { "HOME", 3 }, { "BACK", 4 }, { "CALL", 5 }, { "ENDCALL", 6 }, { "0", 7 }, { "1", 8 }, { "2", 9 }, { "3", 10 }, { "4", 11 }, { "5", 12 }, { "6", 13 }, { "7", 14 }, { "8", 15 }, { "9", 16 }, { "STAR", 17 }, { "POUND", 18 }, { "DPAD_UP", 19 }, { "DPAD_DOWN", 20 }, { "DPAD_LEFT", 21 }, { "DPAD_RIGHT", 22 }, { "DPAD_CENTER", 23 }, { "VOLUME_UP", 24 }, { "VOLUME_DOWN", 25 }, { "POWER", 26 }, { "CAMERA", 27 }, { "CLEAR", 28 }, { "A", 29 }, { "B", 30 }, { "C", 31 }, { "D", 32 }, { "E", 33 }, { "F", 34 }, { "G", 35 }, { "H", 36 }, { "I", 37 }, { "J", 38 }, { "K", 39 }, { "L", 40 }, { "M", 41 }, { "N", 42 }, { "O", 43 }, { "P", 44 }, { "Q", 45 }, { "R", 46 }, { "S", 47 }, { "T", 48 }, { "U", 49 }, { "V", 50 }, { "W", 51 }, { "X", 52 }, { "Y", 53 }, { "Z", 54 }, { "COMMA", 55 }, { "PERIOD", 56 }, { "ALT_LEFT", 57 }, { "ALT_RIGHT", 58 }, { "SHIFT_LEFT", 59 }, { "SHIFT_RIGHT", 60 }, { "TAB", 61 }, { "SPACE", 62 }, { "SYM", 63 }, { "EXPLORER", 64 }, { "ENVELOPE", 65 }, { "ENTER", 66 }, { "DEL", 67 }, { "GRAVE", 68 }, { "MINUS", 69 }, { "EQUALS", 70 }, { "LEFT_BRACKET", 71 }, { "RIGHT_BRACKET", 72 }, { "BACKSLASH", 73 }, { "SEMICOLON", 74 }, { "APOSTROPHE", 75 }, { "SLASH", 76 }, { "AT", 77 }, { "NUM", 78 }, { "HEADSETHOOK", 79 }, { "FOCUS", 80 }, { "PLUS", 81 }, { "MENU", 82 }, { "NOTIFICATION", 83 }, { "SEARCH", 84 }, { "MEDIA_PLAY_PAUSE", 85 }, { "MEDIA_STOP", 86 }, { "MEDIA_NEXT", 87 }, { "MEDIA_PREVIOUS", 88 }, { "MEDIA_REWIND", 89 }, { "MEDIA_FAST_FORWARD", 90 }, { "MUTE", 91 }, { "PAGE_UP", 92 }, { "PAGE_DOWN", 93 }, { "PICTSYMBOLS", 94 }, { "SWITCH_CHARSET", 95 }, { "BUTTON_A", 96 }, { "BUTTON_B", 97 }, { "BUTTON_C", 98 }, { "BUTTON_X", 99 }, { "BUTTON_Y", 100 }, { "BUTTON_Z", 101 }, { "BUTTON_L1", 102 }, { "BUTTON_R1", 103 }, { "BUTTON_L2", 104 }, { "BUTTON_R2", 105 }, { "BUTTON_THUMBL", 106 }, { "BUTTON_THUMBR", 107 }, { "BUTTON_START", 108 }, { "BUTTON_SELECT", 109 }, { "BUTTON_MODE", 110 }, { "ESCAPE", 111 }, { "FORWARD_DEL", 112 }, { "CTRL_LEFT", 113 }, { "CTRL_RIGHT", 114 }, { "CAPS_LOCK", 115 }, { "SCROLL_LOCK", 116 }, { "META_LEFT", 117 }, { "META_RIGHT", 118 }, { "FUNCTION", 119 }, { "SYSRQ", 120 }, { "BREAK", 121 }, { "MOVE_HOME", 122 }, { "MOVE_END", 123 }, { "INSERT", 124 }, { "FORWARD", 125 }, { "MEDIA_PLAY", 126 }, { "MEDIA_PAUSE", 127 }, { "MEDIA_CLOSE", 128 }, { "MEDIA_EJECT", 129 }, { "MEDIA_RECORD", 130 }, { "F1", 131 }, { "F2", 132 }, { "F3", 133 }, { "F4", 134 }, { "F5", 135 }, { "F6", 136 }, { "F7", 137 }, { "F8", 138 }, { "F9", 139 }, { "F10", 140 }, { "F11", 141 }, { "F12", 142 }, { "NUM_LOCK", 143 }, { "NUMPAD_0", 144 }, { "NUMPAD_1", 145 }, { "NUMPAD_2", 146 }, { "NUMPAD_3", 147 }, { "NUMPAD_4", 148 }, { "NUMPAD_5", 149 }, { "NUMPAD_6", 150 }, { "NUMPAD_7", 151 }, { "NUMPAD_8", 152 }, { "NUMPAD_9", 153 }, { "NUMPAD_DIVIDE", 154 }, { "NUMPAD_MULTIPLY", 155 }, { "NUMPAD_SUBTRACT", 156 }, { "NUMPAD_ADD", 157 }, { "NUMPAD_DOT", 158 }, { "NUMPAD_COMMA", 159 }, { "NUMPAD_ENTER", 160 }, { "NUMPAD_EQUALS", 161 }, { "NUMPAD_LEFT_PAREN", 162 }, { "NUMPAD_RIGHT_PAREN", 163 }, { "VOLUME_MUTE", 164 }, { "INFO", 165 }, { "CHANNEL_UP", 166 }, { "CHANNEL_DOWN", 167 }, { "ZOOM_IN", 168 }, { "ZOOM_OUT", 169 }, { "TV", 170 }, { "WINDOW", 171 }, { "GUIDE", 172 }, { "DVR", 173 }, { "BOOKMARK", 174 }, { "CAPTIONS", 175 }, { "SETTINGS", 176 }, { "TV_POWER", 177 }, { "TV_INPUT", 178 }, { "STB_POWER", 179 }, { "STB_INPUT", 180 }, { "AVR_POWER", 181 }, { "AVR_INPUT", 182 }, { "PROG_RED", 183 }, { "PROG_GREEN", 184 }, { "PROG_YELLOW", 185 }, { "PROG_BLUE", 186 }, { "APP_SWITCH", 187 }, { "BUTTON_1", 188 }, { "BUTTON_2", 189 }, { "BUTTON_3", 190 }, { "BUTTON_4", 191 }, { "BUTTON_5", 192 }, { "BUTTON_6", 193 }, { "BUTTON_7", 194 }, { "BUTTON_8", 195 }, { "BUTTON_9", 196 }, { "BUTTON_10", 197 }, { "BUTTON_11", 198 }, { "BUTTON_12", 199 }, { "BUTTON_13", 200 }, { "BUTTON_14", 201 }, { "BUTTON_15", 202 }, { "BUTTON_16", 203 }, { "LANGUAGE_SWITCH", 204 }, { "MANNER_MODE", 205 }, { "3D_MODE", 206 }, { "CONTACTS", 207 }, { "CALENDAR", 208 }, { "MUSIC", 209 }, { "CALCULATOR", 210 }, { "ZENKAKU_HANKAKU", 211 }, { "EISU", 212 }, { "MUHENKAN", 213 }, { "HENKAN", 214 }, { "KATAKANA_HIRAGANA", 215 }, { "YEN", 216 }, { "RO", 217 }, { "KANA", 218 }, { "ASSIST", 219 }, { "BRIGHTNESS_DOWN", 220 }, { "BRIGHTNESS_UP", 221 }, { "MEDIA_AUDIO_TRACK", 222 }, // MStar Android Patch Begin // Common section, range 251-300 { "SOUND_MODE", 251 }, { "PICTURE_MODE", 252 }, { "ASPECT_RATIO", 253 }, { "CHANNEL_RETURN", 254 }, { "SLEEP", 255 }, { "EPG", 256 }, { "LIST", 257 }, { "SUBTITLE", 258 }, { "FAVORITE", 259 }, { "MTS", 260 }, { "FREEZE", 261 }, { "TTX", 262 }, { "CC", 263 }, { "TV_SETTING", 264 }, { "SCREENSHOT", 265 }, { "CLOUD", 266 }, { "VOICE", 267 }, { "USB", 268 }, { "HDMI", 269 }, { "DISPLAY_MODE", 270 }, { "SONG_SYSTEM", 271 }, { "GINGA_BACK", 272}, { "NETFLIX", 273}, { "AMAZONE", 274}, // MStar section, range 301-400 { "MSTAR_BALANCE", 301 }, { "MSTAR_INDEX", 302 }, { "MSTAR_HOLD", 303 }, { "MSTAR_UPDATE", 304 }, { "MSTAR_REVEAL", 305 }, { "MSTAR_SUBCODE", 306 }, { "MSTAR_SIZE", 307 }, { "MSTAR_CLOCK", 308 }, { "MSTAR_STORE_UP", 309 }, { "MSTAR_TRIANGLE_UP", 310 }, { "MSTAR_MOVIE", 311 }, { "MSTAR_FILE", 312 }, { "MSTAR_STAR_PLUS", 313 }, { "MSTAR_AUDIO_TRACK", 314 }, { "MSTAR_OPTIONAL_TIME", 315 }, { "MSTAR_LOOP", 316 }, { "MSTAR_INBOX", 317 }, { "MSTAR_VVOIP", 318 }, { "MSTAR_PVR_BROWSER", 319 }, // Haier section, range 401-500 { "HAIER_TASK", 401 }, { "HAIER_USB", 402 }, { "HAIER_TOOLS", 403 }, { "HAIER_POWERSLEEP", 404 }, { "HAIER_WAKEUP", 405 }, { "HAIER_UNMUTE", 406 }, { "HAIER_CLEANSEARCH", 407 }, // Konka section, range 501-600 { "KONKA_YPBPR", 501 }, { "KONKA_THREEPOINT_LOONPRESS", 502 }, { "KONKA_THREEPOINT_COLLECT", 503 }, { "KONKA_THREEPOINT_DISPERSE", 504 }, { "KONKA_VOICESWITCH", 505 }, { "KONKA_FLYIMEFINGER_SELECT", 506 }, { "KONKA_FLYIMEFINGER_CANCEL", 507 }, { "KONKA_SOUNDOUTPUT_ENABLE", 508 }, { "KONKA_SOUNDOUTPUT_DISABLE", 509 }, { "KONKA_BESTV_EXIT", 510 }, { "KONKA_BESTV_FORWARD", 511 }, { "KONKA_BESTV_BACKWARD", 512 }, { "KONKA_ENTER_FACTORY", 513 }, { "KONKA_FACTORY_BAKE_TV", 514 }, // Skyworth section, range 601-700 // Tcl section, range 4001-4099 { "TCL_MITV", 4001 }, { "TCL_USB_MENU", 4002 }, { "TCL_SWING_R1", 4003 }, { "TCL_SWING_R2", 4004 }, { "TCL_SWING_R3", 4005 }, { "TCL_SWING_R4", 4006 }, { "TCL_SWING_L1", 4007 }, { "TCL_SWING_L2", 4008 }, { "TCL_SWING_L3", 4009 }, { "TCL_SWING_L4", 4010}, { "TCL_WIDGET", 4011}, { "TCL_VGR_LEFT", 4012}, { "TCL_VGR_RIGHT", 4013 }, { "TCL_VGR_TAP", 4014 }, { "TCL_VGR_WAVE", 4015 }, { "TCL_VGR_WAVE_LEFT", 4016 }, { "TCL_VGR_WAVE_RIGHT", 4017 }, { "TCL_VGR_ACTIVE", 4018 }, { "TCL_VGR_DEACTIVE", 4019 }, { "TCL_BODY_SENSOR", 4020 }, { "TCL_CIRCLE_CLOCKWISE", 4021 }, { "TCL_CIRCLE_CTR_CLOCKWISE", 4022 }, { "TCL_GESTURE_X", 4023 }, { "TCL_GESTURE_ALPHA", 4024 }, { "TCL_GESTURE_MUTE", 4025 }, { "TCL_UP", 4026 }, { "TCL_DOWN", 4027 }, { "TCL_LEFT", 4028 }, { "TCL_RIGHT", 4029 }, { "TCL_UP_LEFT", 4030 }, { "TCL_UP_RIGHT", 4031 }, { "TCL_DOWN_LEFT", 4032 }, { "TCL_DOWN_RIGHT", 4033 }, // Changhong section, range 4101-4199 { "CHANGHONGIR_MUTE", 4101 }, { "CHANGHONGIR_INPUT", 4102 }, { "CHANGHONGIR_DEL", 4103 }, { "CHANGHONGIR_MENU", 4104 }, { "CHANGHONGIR_CORN", 4105 }, { "CHANGHONGIR_OK", 4106 }, { "CHANGHONGIR_FLCK_FU", 4107 }, { "CHANGHONGIR_FLCK_FD", 4108 }, { "CHANGHONGIR_FLCK_FL", 4109 }, { "CHANGHONGIR_FLCK_FR", 4110 }, { "CHANGHONGIR_FLCK_SU", 4111 }, { "CHANGHONGIR_FLCK_SD", 4112 }, { "CHANGHONGIR_FLCK_SL", 4113 }, { "CHANGHONGIR_FLCK_SR", 4114 }, { "CHANGHONGIR_PINCH", 4115 }, { "CHANGHONGIR_SPREAD", 4116 }, { "CHANGHONGIR_VOICE", 4117 }, { "CHANGHONGIR_HAND", 4118 }, { "CHANGHONGIR_3D", 4119 }, { "CHANGHONGIR_HELP", 4120 }, { "CHANGHONGIR_APP", 4121 }, { "CHANGHONGIR_MOUSE", 4122 }, { "CHANGHONGIR_EPG", 4123 }, { "CHANGHONGIR_HOME", 4124 }, { "CHANGHONGIR_SETTINGS", 4125 }, // Hisense section, range 4201-4299 { "HISENSE_G_SENSOR", 4201 }, { "HISENSE_LOW_BATTERY", 4202 }, { "HISENSE_SLIDEUP", 4203 }, { "HISENSE_SLIDEDOWN", 4204 }, { "HISENSE_SLIDELEFT", 4205 }, { "HISENSE_SLIDERIGHT", 4206 }, { "HISENSE_RAPID_SLIDEUP", 4207 }, { "HISENSE_RAPID_SLIDEDOWN", 4208 }, { "HISENSE_RAPID_SLIDELEFT", 4209 }, { "HISENSE_RAPID_SLIDERIGHT", 4210 }, { "HISENSE_FAC_NEC_M", 4211 }, { "HISENSE_FAC_NEC_IP", 4212 }, { "HISENSE_FAC_NEC_SAVE", 4213 }, { "HISENSE_FAC_NEC_3D", 4214 }, { "HISENSE_FAC_NEC_PC", 4215 }, { "HISENSE_FAC_NEC_LOGO", 4216 }, { "HISENSE_FAC_NEC_YPBPR", 4217 }, { "HISENSE_FAC_NEC_HDMI", 4218 }, { "HISENSE_FAC_NEC_F1", 4219 }, { "HISENSE_FAC_NEC_F2", 4220 }, { "HISENSE_FAC_NEC_F3", 4221 }, { "HISENSE_FAC_NEC_F4", 4222 }, { "HISENSE_FAC_NEC_F5", 4223 }, { "HISENSE_FAC_NEC_F6", 4224 }, { "HISENSE_FAC_NEC_F7", 4225 }, { "HISENSE_FAC_NEC_OK", 4226 }, { "HISENSE_FAC_NEC_MAC", 4227 }, { "HISENSE_FAC_NEC_AV", 4228 }, { "HISENSE_FAC_NEC_PATTERN", 4229 }, { "HISENSE_FAC_NEC_AGING", 4230 }, { "HISENSE_FAC_NEC_BALANCE", 4231 }, { "HISENSE_FAC_NEC_ADC", 4232 }, { "HISENSE_FAC_NEC_RDRV_INCREASE", 4233 }, { "HISENSE_FAC_NEC_RDRV_DECREASE", 4234 }, { "HISENSE_FAC_NEC_GDRV_INCREASE", 4235 }, { "HISENSE_FAC_NEC_GDRV_DECREASE", 4236 }, { "HISENSE_FAC_NEC_BDRV_INCREASE", 4237 }, { "HISENSE_FAC_NEC_BDRV_DECREASE", 4238 }, { "HISENSE_FAC_NEC_RCUT_INCREASE", 4239 }, { "HISENSE_FAC_NEC_RCUT_DECREASE", 4240 }, { "HISENSE_FAC_NEC_GCUT_INCREASE", 4241 }, { "HISENSE_FAC_NEC_GCUT_DECREASE", 4242 }, { "HISENSE_FAC_NEC_BCUT_INCREASE", 4243 }, { "HISENSE_FAC_NEC_BCUT_DECREASE", 4244 }, { "HISENSE_PRODUCT_SCAN_START", 4245 }, { "HISENSE_PRODUCT_SCAN_OVER", 4246 }, { "HISENSE_TEST_BROAD_TV", 4247 }, { "HISENSE_TEST_BROAD_DTV", 4248 }, { "HISENSE_TEST_BROAD_AV1", 4249 }, { "HISENSE_TEST_BROAD_AV2", 4250 }, { "HISENSE_TEST_BROAD_AV3", 4251 }, { "HISENSE_TEST_BROAD_SVIDEO1", 4252 }, { "HISENSE_TEST_BROAD_SVIDEO2", 4253 }, { "HISENSE_TEST_BROAD_SVIDEO3", 4254 }, { "HISENSE_TEST_BROAD_SCART1", 4255 }, { "HISENSE_TEST_BROAD_SCART2", 4256 }, { "HISENSE_TEST_BROAD_SCART3", 4257 }, { "HISENSE_TEST_BOARD_YPBPR1", 4258 }, { "HISENSE_TEST_BOARD_YPBPR2", 4259 }, { "HISENSE_TEST_BOARD_YPBPR3", 4260 }, { "HISENSE_TEST_BOARD_VGA", 4261 }, { "HISENSE_TEST_BOARD_HDMI1", 4262 }, { "HISENSE_TEST_BOARD_HDMI2", 4263 }, { "HISENSE_TEST_BOARD_HDMI3", 4264 }, { "HISENSE_TEST_BOARD_HDMI4", 4265 }, { "HISENSE_TEST_BOARD_HDMI5", 4266 }, { "HISENSE_TEST_BOARD_DMP", 4267 }, { "HISENSE_TEST_BOARD_EMP", 4268 }, { "HISENSE_TEST_BOARD_AUTOCOLOR", 4269 }, { "HISENSE_TEST_BOARD_SAVE", 4270 }, { "HISENSE_TEST_BOARD_TELITEXT", 4271 }, { "HISENSE_TEST_BOARD_SAPL", 4272 }, { "HISENSE_TEST_BOARD_VCHIP", 4273 }, { "HISENSE_TEST_BOARD_CCD", 4274 }, { "HISENSE_TEST_BOARD_BTSC", 4275 }, { "HISENSE_TEST_BOARD_FAC_OK", 4276 }, // MStar Android Patch End // NOTE: If you add a new keycode here you must also add it to several other files. // Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list. { NULL, 0 }};// NOTE: If you edit these flags, also edit policy flags in Input.h.static const KeycodeLabel FLAGS[] = { { "WAKE", 0x00000001 }, { "WAKE_DROPPED", 0x00000002 }, { "SHIFT", 0x00000004 }, { "CAPS_LOCK", 0x00000008 }, { "ALT", 0x00000010 }, { "ALT_GR", 0x00000020 }, { "MENU", 0x00000040 }, { "LAUNCHER", 0x00000080 }, { "VIRTUAL", 0x00000100 }, { "FUNCTION", 0x00000200 }, { NULL, 0 }};static const KeycodeLabel AXES[] = { { "X", 0 }, { "Y", 1 }, { "PRESSURE", 2 }, { "SIZE", 3 }, { "TOUCH_MAJOR", 4 }, { "TOUCH_MINOR", 5 }, { "TOOL_MAJOR", 6 }, { "TOOL_MINOR", 7 }, { "ORIENTATION", 8 }, { "VSCROLL", 9 }, { "HSCROLL", 10 }, { "Z", 11 }, { "RX", 12 }, { "RY", 13 }, { "RZ", 14 }, { "HAT_X", 15 }, { "HAT_Y", 16 }, { "LTRIGGER", 17 }, { "RTRIGGER", 18 }, { "THROTTLE", 19 }, { "RUDDER", 20 }, { "WHEEL", 21 }, { "GAS", 22 }, { "BRAKE", 23 }, { "DISTANCE", 24 }, { "TILT", 25 }, { "GENERIC_1", 32 }, { "GENERIC_2", 33 }, { "GENERIC_3", 34 }, { "GENERIC_4", 35 }, { "GENERIC_5", 36 }, { "GENERIC_6", 37 }, { "GENERIC_7", 38 }, { "GENERIC_8", 39 }, { "GENERIC_9", 40 }, { "GENERIC_10", 41 }, { "GENERIC_11", 42 }, { "GENERIC_12", 43 }, { "GENERIC_13", 44 }, { "GENERIC_14", 45 }, { "GENERIC_15", 46 }, { "GENERIC_16", 47 }, // NOTE: If you add a new axis here you must also add it to several other files. // Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list. { NULL, -1 }};#endif // _LIBINPUT_KEYCODE_LABELS_H</span>
3)在/frameworks/native/include/android/keycodes.h中添加如下的 AKEYCODE_MSTAR_WLS = 320,下面看下该文件的定义
<span style="font-family:FangSong_GB2312;font-size:18px;">/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#ifndef _ANDROID_KEYCODES_H#define _ANDROID_KEYCODES_H/****************************************************************** * * IMPORTANT NOTICE: * * This file is part of Android's set of stable system headers * exposed by the Android NDK (Native Development Kit). * * Third-party source AND binary code relies on the definitions * here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. * * - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) * - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS * - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY * - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES */#include <sys/types.h>#ifdef __cplusplusextern "C" {#endif/* * Key codes. */enum { AKEYCODE_UNKNOWN = 0, AKEYCODE_SOFT_LEFT = 1, AKEYCODE_SOFT_RIGHT = 2, AKEYCODE_HOME = 3, AKEYCODE_BACK = 4, AKEYCODE_CALL = 5, AKEYCODE_ENDCALL = 6, AKEYCODE_0 = 7, AKEYCODE_1 = 8, AKEYCODE_2 = 9, AKEYCODE_3 = 10, AKEYCODE_4 = 11, AKEYCODE_5 = 12, AKEYCODE_6 = 13, AKEYCODE_7 = 14, AKEYCODE_8 = 15, AKEYCODE_9 = 16, AKEYCODE_STAR = 17, AKEYCODE_POUND = 18, AKEYCODE_DPAD_UP = 19, AKEYCODE_DPAD_DOWN = 20, AKEYCODE_DPAD_LEFT = 21, AKEYCODE_DPAD_RIGHT = 22, AKEYCODE_DPAD_CENTER = 23, AKEYCODE_VOLUME_UP = 24, AKEYCODE_VOLUME_DOWN = 25, AKEYCODE_POWER = 26, AKEYCODE_CAMERA = 27, AKEYCODE_CLEAR = 28, AKEYCODE_A = 29, AKEYCODE_B = 30, AKEYCODE_C = 31, AKEYCODE_D = 32, AKEYCODE_E = 33, AKEYCODE_F = 34, AKEYCODE_G = 35, AKEYCODE_H = 36, AKEYCODE_I = 37, AKEYCODE_J = 38, AKEYCODE_K = 39, AKEYCODE_L = 40, AKEYCODE_M = 41, AKEYCODE_N = 42, AKEYCODE_O = 43, AKEYCODE_P = 44, AKEYCODE_Q = 45, AKEYCODE_R = 46, AKEYCODE_S = 47, AKEYCODE_T = 48, AKEYCODE_U = 49, AKEYCODE_V = 50, AKEYCODE_W = 51, AKEYCODE_X = 52, AKEYCODE_Y = 53, AKEYCODE_Z = 54, AKEYCODE_COMMA = 55, AKEYCODE_PERIOD = 56, AKEYCODE_ALT_LEFT = 57, AKEYCODE_ALT_RIGHT = 58, AKEYCODE_SHIFT_LEFT = 59, AKEYCODE_SHIFT_RIGHT = 60, AKEYCODE_TAB = 61, AKEYCODE_SPACE = 62, AKEYCODE_SYM = 63, AKEYCODE_EXPLORER = 64, AKEYCODE_ENVELOPE = 65, AKEYCODE_ENTER = 66, AKEYCODE_DEL = 67, AKEYCODE_GRAVE = 68, AKEYCODE_MINUS = 69, AKEYCODE_EQUALS = 70, AKEYCODE_LEFT_BRACKET = 71, AKEYCODE_RIGHT_BRACKET = 72, AKEYCODE_BACKSLASH = 73, AKEYCODE_SEMICOLON = 74, AKEYCODE_APOSTROPHE = 75, AKEYCODE_SLASH = 76, AKEYCODE_AT = 77, AKEYCODE_NUM = 78, AKEYCODE_HEADSETHOOK = 79, AKEYCODE_FOCUS = 80, // *Camera* focus AKEYCODE_PLUS = 81, AKEYCODE_MENU = 82, AKEYCODE_NOTIFICATION = 83, AKEYCODE_SEARCH = 84, AKEYCODE_MEDIA_PLAY_PAUSE= 85, AKEYCODE_MEDIA_STOP = 86, AKEYCODE_MEDIA_NEXT = 87, AKEYCODE_MEDIA_PREVIOUS = 88, AKEYCODE_MEDIA_REWIND = 89, AKEYCODE_MEDIA_FAST_FORWARD = 90, AKEYCODE_MUTE = 91, AKEYCODE_PAGE_UP = 92, AKEYCODE_PAGE_DOWN = 93, AKEYCODE_PICTSYMBOLS = 94, AKEYCODE_SWITCH_CHARSET = 95, AKEYCODE_BUTTON_A = 96, AKEYCODE_BUTTON_B = 97, AKEYCODE_BUTTON_C = 98, AKEYCODE_BUTTON_X = 99, AKEYCODE_BUTTON_Y = 100, AKEYCODE_BUTTON_Z = 101, AKEYCODE_BUTTON_L1 = 102, AKEYCODE_BUTTON_R1 = 103, AKEYCODE_BUTTON_L2 = 104, AKEYCODE_BUTTON_R2 = 105, AKEYCODE_BUTTON_THUMBL = 106, AKEYCODE_BUTTON_THUMBR = 107, AKEYCODE_BUTTON_START = 108, AKEYCODE_BUTTON_SELECT = 109, AKEYCODE_BUTTON_MODE = 110, AKEYCODE_ESCAPE = 111, AKEYCODE_FORWARD_DEL = 112, AKEYCODE_CTRL_LEFT = 113, AKEYCODE_CTRL_RIGHT = 114, AKEYCODE_CAPS_LOCK = 115, AKEYCODE_SCROLL_LOCK = 116, AKEYCODE_META_LEFT = 117, AKEYCODE_META_RIGHT = 118, AKEYCODE_FUNCTION = 119, AKEYCODE_SYSRQ = 120, AKEYCODE_BREAK = 121, AKEYCODE_MOVE_HOME = 122, AKEYCODE_MOVE_END = 123, AKEYCODE_INSERT = 124, AKEYCODE_FORWARD = 125, AKEYCODE_MEDIA_PLAY = 126, AKEYCODE_MEDIA_PAUSE = 127, AKEYCODE_MEDIA_CLOSE = 128, AKEYCODE_MEDIA_EJECT = 129, AKEYCODE_MEDIA_RECORD = 130, AKEYCODE_F1 = 131, AKEYCODE_F2 = 132, AKEYCODE_F3 = 133, AKEYCODE_F4 = 134, AKEYCODE_F5 = 135, AKEYCODE_F6 = 136, AKEYCODE_F7 = 137, AKEYCODE_F8 = 138, AKEYCODE_F9 = 139, AKEYCODE_F10 = 140, AKEYCODE_F11 = 141, AKEYCODE_F12 = 142, AKEYCODE_NUM_LOCK = 143, AKEYCODE_NUMPAD_0 = 144, AKEYCODE_NUMPAD_1 = 145, AKEYCODE_NUMPAD_2 = 146, AKEYCODE_NUMPAD_3 = 147, AKEYCODE_NUMPAD_4 = 148, AKEYCODE_NUMPAD_5 = 149, AKEYCODE_NUMPAD_6 = 150, AKEYCODE_NUMPAD_7 = 151, AKEYCODE_NUMPAD_8 = 152, AKEYCODE_NUMPAD_9 = 153, AKEYCODE_NUMPAD_DIVIDE = 154, AKEYCODE_NUMPAD_MULTIPLY = 155, AKEYCODE_NUMPAD_SUBTRACT = 156, AKEYCODE_NUMPAD_ADD = 157, AKEYCODE_NUMPAD_DOT = 158, AKEYCODE_NUMPAD_COMMA = 159, AKEYCODE_NUMPAD_ENTER = 160, AKEYCODE_NUMPAD_EQUALS = 161, AKEYCODE_NUMPAD_LEFT_PAREN = 162, AKEYCODE_NUMPAD_RIGHT_PAREN = 163, AKEYCODE_VOLUME_MUTE = 164, AKEYCODE_INFO = 165, AKEYCODE_CHANNEL_UP = 166, AKEYCODE_CHANNEL_DOWN = 167, AKEYCODE_ZOOM_IN = 168, AKEYCODE_ZOOM_OUT = 169, AKEYCODE_TV = 170, AKEYCODE_WINDOW = 171, AKEYCODE_GUIDE = 172, AKEYCODE_DVR = 173, AKEYCODE_BOOKMARK = 174, AKEYCODE_CAPTIONS = 175, AKEYCODE_SETTINGS = 176, AKEYCODE_TV_POWER = 177, AKEYCODE_TV_INPUT = 178, AKEYCODE_STB_POWER = 179, AKEYCODE_STB_INPUT = 180, AKEYCODE_AVR_POWER = 181, AKEYCODE_AVR_INPUT = 182, AKEYCODE_PROG_RED = 183, AKEYCODE_PROG_GREEN = 184, AKEYCODE_PROG_YELLOW = 185, AKEYCODE_PROG_BLUE = 186, AKEYCODE_APP_SWITCH = 187, AKEYCODE_BUTTON_1 = 188, AKEYCODE_BUTTON_2 = 189, AKEYCODE_BUTTON_3 = 190, AKEYCODE_BUTTON_4 = 191, AKEYCODE_BUTTON_5 = 192, AKEYCODE_BUTTON_6 = 193, AKEYCODE_BUTTON_7 = 194, AKEYCODE_BUTTON_8 = 195, AKEYCODE_BUTTON_9 = 196, AKEYCODE_BUTTON_10 = 197, AKEYCODE_BUTTON_11 = 198, AKEYCODE_BUTTON_12 = 199, AKEYCODE_BUTTON_13 = 200, AKEYCODE_BUTTON_14 = 201, AKEYCODE_BUTTON_15 = 202, AKEYCODE_BUTTON_16 = 203, AKEYCODE_LANGUAGE_SWITCH = 204, AKEYCODE_MANNER_MODE = 205, AKEYCODE_3D_MODE = 206, AKEYCODE_CONTACTS = 207, AKEYCODE_CALENDAR = 208, AKEYCODE_MUSIC = 209, AKEYCODE_CALCULATOR = 210, AKEYCODE_ZENKAKU_HANKAKU = 211, AKEYCODE_EISU = 212, AKEYCODE_MUHENKAN = 213, AKEYCODE_HENKAN = 214, AKEYCODE_KATAKANA_HIRAGANA = 215, AKEYCODE_YEN = 216, AKEYCODE_RO = 217, AKEYCODE_KANA = 218, AKEYCODE_ASSIST = 219, AKEYCODE_BRIGHTNESS_DOWN = 220, AKEYCODE_BRIGHTNESS_UP = 221, AKEYCODE_MEDIA_AUDIO_TRACK = 222, // MStar Android Patch Begin // Common section, range 251-300 AKEYCODE_SOUND_MODE = 251, AKEYCODE_PICTURE_MODE = 252, AKEYCODE_ASPECT_RATIO = 253, AKEYCODE_CHANNEL_RETURN = 254, AKEYCODE_SLEEP = 255, AKEYCODE_EPG = 256, AKEYCODE_LIST = 257, AKEYCODE_SUBTITLE = 258, AKEYCODE_FAVORITE = 259, AKEYCODE_MTS = 260, AKEYCODE_FREEZE = 261, AKEYCODE_TTX = 262, AKEYCODE_CC = 263, AKEYCODE_TV_SETTING = 264, AKEYCODE_SCREENSHOT = 265, AKEYCODE_CLOUD = 266, AKEYCODE_VOICE = 267, AKEYCODE_USB = 268, AKEYCODE_HDMI = 269, AKEYCODE_DISPLAY_MODE = 270, AKEYCODE_SONG_SYSTEM = 271, AKEYCODE_GINGA_BACK = 272, AKEYCODE_NETFLIX = 273, AKEYCODE_AMAZONE = 274, // Mstar section, range 301-400 AKEYCODE_MSTAR_BALANCE = 301, AKEYCODE_MSTAR_INDEX = 302, AKEYCODE_MSTAR_HOLD = 303, AKEYCODE_MSTAR_UPDATE = 304, AKEYCODE_MSTAR_REVEAL = 305, AKEYCODE_MSTAR_SUBCODE = 306, AKEYCODE_MSTAR_SIZE = 307, AKEYCODE_MSTAR_CLOCK = 308, AKEYCODE_MSTAR_STORE_UP = 309, AKEYCODE_MSTAR_TRIANGLE_UP = 310, AKEYCODE_MSTAR_MOVIE = 311, AKEYCODE_MSTAR_FILE = 312, AKEYCODE_MSTAR_STAR_PLUS = 313, AKEYCODE_MSTAR_AUDIO_TRACK = 314, AKEYCODE_MSTAR_OPTIONAL_TIME = 315, AKEYCODE_MSTAR_LOOP = 316, AKEYCODE_MSTAR_INBOX = 317, AKEYCODE_MSTAR_VVOIP = 318, AKEYCODE_MSTAR_PVR_BROWSER = 319, // Konka section, range 501-600 AKEYCODE_KONKA_YPBPR = 501, AKEYCODE_KONKA_THREEPOINT_LOONPRESS = 502, AKEYCODE_KONKA_THREEPOINT_COLLECT = 503, AKEYCODE_KONKA_THREEPOINT_DISPERSE = 504, AKEYCODE_KONKA_VOICESWITCH = 505, AKEYCODE_KONKA_FLYIMEFINGER_SELECT = 506, AKEYCODE_KONKA_FLYIMEFINGER_CANCEL = 507, AKEYCODE_KONKA_SOUNDOUTPUT_ENABLE = 508, AKEYCODE_KONKA_SOUNDOUTPUT_DISABLE = 509, AKEYCODE_KONKA_BESTV_EXIT = 510, AKEYCODE_KONKA_BESTV_FORWARD = 511, AKEYCODE_KONKA_BESTV_BACKWARD = 512, AKEYCODE_KONKA_ENTER_FACTORY = 513, AKEYCODE_KONKA_FACTORY_BAKE_TV = 514, // Haier section, range 401-500 AKEYCODE_HAIER_TASK = 401, AKEYCODE_HAIER_TOOLS = 402, AKEYCODE_HAIER_POWERSLEEP = 403, AKEYCODE_HAIER_WAKEUP = 404, AKEYCODE_HAIER_UNMUTE = 405, AKEYCODE_HAIER_CLEANSEARCH = 406, // Skyworth section, range 601-700 // Tcl section, range 4001-4100 AKEYCODE_TCL_MITV = 4001, AKEYCODE_TCL_USB_MENU = 4002, AKEYCODE_TCL_SWING_R1 = 4003, AKEYCODE_TCL_SWING_R2 = 4004, AKEYCODE_TCL_SWING_R3 = 4005, AKEYCODE_TCL_SWING_R4 = 4006, AKEYCODE_TCL_SWING_L1 = 4007, AKEYCODE_TCL_SWING_L2 = 4008, AKEYCODE_TCL_SWING_L3 = 4009, AKEYCODE_TCL_SWING_L4 = 4010, AKEYCODE_TCL_WIDGET = 4011, AKEYCODE_TCL_VGR_LEFT = 4012, AKEYCODE_TCL_VGR_RIGHT = 4013, AKEYCODE_TCL_VGR_TAP = 4014, AKEYCODE_TCL_VGR_WAVE = 4015, AKEYCODE_TCL_VGR_WAVE_LEFT = 4016, AKEYCODE_TCL_VGR_WAVE_RIGHT = 4017, AKEYCODE_TCL_VGR_ACTIVE = 4018, AKEYCODE_TCL_VGR_DEACTIVE = 4019, AKEYCODE_TCL_BODY_SENSOR = 4020, AKEYCODE_TCL_CIRCLE_CLOCKWISE = 4021, AKEYCODE_TCL_CIRCLE_CTR_CLOCKWISE = 4022, AKEYCODE_TCL_GESTURE_X = 4023, AKEYCODE_TCL_GESTURE_ALPHA = 4024, AKEYCODE_TCL_GESTURE_MUTE = 4025, AKEYCODE_TCL_UP = 4026, AKEYCODE_TCL_DOWN = 4027, AKEYCODE_TCL_LEFT = 4028, AKEYCODE_TCL_RIGHT = 4029, AKEYCODE_TCL_UP_LEFT = 4030, AKEYCODE_TCL_UP_RIGHT = 4031, AKEYCODE_TCL_DOWN_LEFT = 4032, AKEYCODE_TCL_DOWN_RIGHT = 4033, // Changhong section, range 4101-4200 AKEYCODE_CHANGHONGIR_MUTE = 4101, AKEYCODE_CHANGHONGIR_INPUT = 4102, AKEYCODE_CHANGHONGIR_DEL = 4103, AKEYCODE_CHANGHONGIR_MENU = 4104, AKEYCODE_CHANGHONGIR_CORN = 4105, AKEYCODE_CHANGHONGIR_OK = 4106, AKEYCODE_CHANGHONGIR_FLCK_FU = 4107, AKEYCODE_CHANGHONGIR_FLCK_FD = 4108, AKEYCODE_CHANGHONGIR_FLCK_FL = 4109, AKEYCODE_CHANGHONGIR_FLCK_FR = 4110, AKEYCODE_CHANGHONGIR_FLCK_SU = 4111, AKEYCODE_CHANGHONGIR_FLCK_SD = 4112, AKEYCODE_CHANGHONGIR_FLCK_SL = 4113, AKEYCODE_CHANGHONGIR_FLCK_SR = 4114, AKEYCODE_CHANGHONGIR_PINCH = 4115, AKEYCODE_CHANGHONGIR_SPREAD = 4116, AKEYCODE_CHANGHONGIR_VOICE = 4117, AKEYCODE_CHANGHONGIR_HAND = 4118, AKEYCODE_CHANGHONGIR_3D = 4119, AKEYCODE_CHANGHONGIR_HELP = 4120, AKEYCODE_CHANGHONGIR_APP = 4121, AKEYCODE_CHANGHONGIR_MOUSE = 4122, AKEYCODE_CHANGHONGIR_EPG = 4123, AKEYCODE_CHANGHONGIR_HOME = 4124, AKEYCODE_CHANGHONGIR_SETTINGS = 4125, // Hisense section, range 4201-4300 AKEYCODE_HISENSE_G_SENSOR = 4201, AKEYCODE_HISENSE_LOW_BATTERY = 4202, AKEYCODE_HISENSE_SLIDEUP = 4203, AKEYCODE_HISENSE_SLIDEDOWN = 4204, AKEYCODE_HISENSE_SLIDELEFT = 4205, AKEYCODE_HISENSE_SLIDERIGHT = 4206, AKEYCODE_HISENSE_RAPID_SLIDEUP = 4207, AKEYCODE_HISENSE_RAPID_SLIDEDOWN = 4208, AKEYCODE_HISENSE_RAPID_SLIDELEFT = 4209, AKEYCODE_HISENSE_RAPID_SLIDERIGHT = 4210, AKEYCODE_HISENSE_FAC_NEC_M = 4211, AKEYCODE_HISENSE_FAC_NEC_IP = 4212, AKEYCODE_HISENSE_FAC_NEC_SAVE = 4213, AKEYCODE_HISENSE_FAC_NEC_3D = 4214, AKEYCODE_HISENSE_FAC_NEC_PC = 4215, AKEYCODE_HISENSE_FAC_NEC_LOGO = 4216, AKEYCODE_HISENSE_FAC_NEC_YPBPR = 4217, AKEYCODE_HISENSE_FAC_NEC_HDMI = 4218, AKEYCODE_HISENSE_FAC_NEC_F1 = 4219, AKEYCODE_HISENSE_FAC_NEC_F2 = 4220, AKEYCODE_HISENSE_FAC_NEC_F3 = 4221, AKEYCODE_HISENSE_FAC_NEC_F4 = 4222, AKEYCODE_HISENSE_FAC_NEC_F5 = 4223, AKEYCODE_HISENSE_FAC_NEC_F6 = 4224, AKEYCODE_HISENSE_FAC_NEC_F7 = 4225, AKEYCODE_HISENSE_FAC_NEC_OK = 4226, AKEYCODE_HISENSE_FAC_NEC_MAC = 4227, AKEYCODE_HISENSE_FAC_NEC_AV = 4228, AKEYCODE_HISENSE_FAC_NEC_PATTERN = 4229, AKEYCODE_HISENSE_FAC_NEC_AGING = 4230, AKEYCODE_HISENSE_FAC_NEC_BALANCE = 4231, AKEYCODE_HISENSE_FAC_NEC_ADC = 4232, AKEYCODE_HISENSE_FAC_NEC_RDRV_INCREASE = 4233, AKEYCODE_HISENSE_FAC_NEC_RDRV_DECREASE = 4234, AKEYCODE_HISENSE_FAC_NEC_GDRV_INCREASE = 4235, AKEYCODE_HISENSE_FAC_NEC_GDRV_DECREASE = 4236, AKEYCODE_HISENSE_FAC_NEC_BDRV_INCREASE = 4237, AKEYCODE_HISENSE_FAC_NEC_BDRV_DECREASE = 4238, AKEYCODE_HISENSE_FAC_NEC_RCUT_INCREASE = 4239, AKEYCODE_HISENSE_FAC_NEC_RCUT_DECREASE = 4240, AKEYCODE_HISENSE_FAC_NEC_GCUT_INCREASE = 4241, AKEYCODE_HISENSE_FAC_NEC_GCUT_DECREASE = 4242, AKEYCODE_HISENSE_FAC_NEC_BCUT_INCREASE = 4243, AKEYCODE_HISENSE_FAC_NEC_BCUT_DECREASE = 4244, AKEYCODE_HISENSE_PRODUCT_SCAN_START = 4245, AKEYCODE_HISENSE_PRODUCT_SCAN_OVER = 4246, AKEYCODE_HISENSE_TEST_BROAD_TV = 4247, AKEYCODE_HISENSE_TEST_BROAD_DTV = 4248, AKEYCODE_HISENSE_TEST_BROAD_AV1 = 4249, AKEYCODE_HISENSE_TEST_BROAD_AV2 = 4250, AKEYCODE_HISENSE_TEST_BROAD_AV3 = 4251, AKEYCODE_HISENSE_TEST_BROAD_SVIDEO1 = 4252, AKEYCODE_HISENSE_TEST_BROAD_SVIDEO2 = 4253, AKEYCODE_HISENSE_TEST_BROAD_SVIDEO3 = 4254, AKEYCODE_HISENSE_TEST_BROAD_SCART1 = 4255, AKEYCODE_HISENSE_TEST_BROAD_SCART2 = 4256, AKEYCODE_HISENSE_TEST_BROAD_SCART3 = 4257, AKEYCODE_HISENSE_TEST_BOARD_YPBPR1 = 4258, AKEYCODE_HISENSE_TEST_BOARD_YPBPR2 = 4259, AKEYCODE_HISENSE_TEST_BOARD_YPBPR3 = 4260, AKEYCODE_HISENSE_TEST_BOARD_VGA = 4261, AKEYCODE_HISENSE_TEST_BOARD_HDMI1 = 4262, AKEYCODE_HISENSE_TEST_BOARD_HDMI2 = 4263, AKEYCODE_HISENSE_TEST_BOARD_HDMI3 = 4264, AKEYCODE_HISENSE_TEST_BOARD_HDMI4 = 4265, AKEYCODE_HISENSE_TEST_BOARD_HDMI5 = 4266, AKEYCODE_HISENSE_TEST_BOARD_DMP = 4267, AKEYCODE_HISENSE_TEST_BOARD_EMP = 4268, AKEYCODE_HISENSE_TEST_BOARD_AUTOCOLOR = 4269, AKEYCODE_HISENSE_TEST_BOARD_SAVE = 4270, AKEYCODE_HISENSE_TEST_BOARD_TELITEXT = 4271, AKEYCODE_HISENSE_TEST_BOARD_SAPL = 4272, AKEYCODE_HISENSE_TEST_BOARD_VCHIP = 4273, AKEYCODE_HISENSE_TEST_BOARD_CCD = 4274, AKEYCODE_HISENSE_TEST_BOARD_BTSC = 4275, AKEYCODE_HISENSE_TEST_BOARD_FAC_OK = 4276, // MStar Android Patch End // NOTE: If you add a new keycode here you must also add it to several other files. // Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.};#ifdef __cplusplus}#endif#endif // _ANDROID_KEYCODES_H</span>
4)在frameworks/base/core/res/res/values/attrs.xml添加如下
<enum name="KEYCODE_WLS" value="320" />
5)在frameworks/base/core/java/android/view/KeyEvent.java添加对应的 public static final int KEYCODE_WLS = 320;
经过如上的步骤就将"123"按键和Android系统中的KEYCODE_WLS就对应起来了,注意这里的"123“键值并不是真正意义上的123键值,他只是linux驱动向上层抛出的键值。
6)在Android的framework层的键值处理函数中,捕获按键,并进行相应处理。
在framework层的input系统中,加入对wifi按键的捕获。
添加的文件是:frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
添加的具体方法:在PhoneWindowManager.java的interceptKeyBeforeQueueing()函数中,不惑该键值,至于怎么处理处决您的业务处理了。
在这里再总结下我对Android键值处理的理解,我的理解:看了一下key character map的处理,是通过读取kl文件然后使用驱动程序提供的ioctl函数去修改来自输入设备的扫描码和系统预定义的keycode的映射关系。 这样的话,对于硬件扫描码,只需要修改这个kl文件。上层得到的都是系统预定义的keycode。
重要补充:
映射关系: ir硬件扫描码在驱动里面被 映射为 kernel/include/linux/input.h里面定义的某个键值。但是这个键值只在linux系统中使用。
Android通过源码目录下的device/xxx/xxx.kl( keylayout )文件完成linux键值到Android系统要使用的键值的映射
更多相关文章
- 让 Android 可以识别BMP图片文件,且目前Android所支持的所有图片
- Android 系统基础
- android车载娱乐系统跟android平板的分析比较
- Android中的gen文件为空或者不存在的处理方法
- Android系统架构——揭开Android系统框架的面纱
- Android系统框架总结(好文)
- 基于android的远程视频监控系统(已开放源码)
- Android APK 扩展文件
- Android颜色值XML文件