Android HID设备(键盘、遥控等)功能实现流程及键值映射关系

 HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、遥控器、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。

    之前文章 android 键盘(遥控)键值定义大全 中整理了android中各种功能键值定义,那么从键盘按键到安卓设备控制生效的流程是怎样的呢?

Android 设备上的键盘操作实现流程:

  1. EventHub 从 evdev 驱动程序中读取原始事件,并使用键盘的按键布局映射将 Linux 按键代码(有时也称扫描代码)映射到 Android 按键代码中。

  2. InputReader 将消费原始事件,并更新元键状态。例如,如果您按下或释放左 Shift 键,该读取器就会相应地设置或重置 META_SHIFT_LEFT_ON 和 META_SHIFT_ON 位。

  3. InputReader 会向 InputDispatcher 发送按键事件的相关通知。

  4. InputDispatcher 通过调用 WindowManagerPolicy.interceptKeyBeforeQueueing 询问 WindowManagerPolicy 如何处理按键事件。该方法(负责在按下某些按键时唤醒设备)属于关键路径的一部分。实际上,EventHub 会在此关键路径上一直持有唤醒锁,从而确保它运行至结束。

  5. 如果目前正在使用 InputFilter,那么 InputDispatcher 将给予它机会消费或转换按键。InputFilter 可用于实现低级别的全系统可访问性政策。

  6. InputDispatcher 可将按键排入队列,以便在分配线程上对其进行处理。

  7. 当 InputDispatcher 将按键移出队列时,它会通过调用 WindowManagerPolicy.interceptKeyBeforeDispatching 使 WindowManagerPolicy 再次有机会拦截按键事件。此方法可用于处理系统快捷方式和其他功能。

  8. 随后,InputDispatcher 会识别按键事件目标(获得焦点的窗口),并等待按键事件目标就绪。接下来,InputDispatcher 会将按键事件发送到应用。

  9. 在应用内,按键事件会沿着视图层次结构向下传送到获得焦点的视图,以进行 IME 按键预分配。

  10. 如果按键事件未在 IME 按键预分配阶段进行处理,而某个 IME 正在使用中,那么按键事件会被发送到 IME。

  11. 如果 IME 未消费按键事件,那么按键事件会沿着视图层次结构向下传送到获得焦点的视图,从而进行标准按键分配。

  12. 应用反过来向 InputDispatcher 报告有关按键事件是否被使用的情况。如果事件未被使用,InputDispatcher 会调用 WindowManagerPolicy.dispatchUnhandledKey 来应用“回退”行为。根据回退操作,可以使用不同的按键代码重新启动按键事件分配周期。例如,如果应用不处理 KEYCODE_ESCAPE,系统可能会改为将按键事件作为 KEYCODE_BACK 再次分配。

HID用途用两个码值表示,分别代表键的类型和键值,比如0x07代表该键的类型为功能键,0x0001代表键值。以USB遥控器为例

常见的按键分类如下:

  1. 控制键(Control Key):

    • 码值 0x01:Ctrl 键
  2. 转换键(Modifier Key):

    • 码值 0x02:Shift 键
    • 码值 0x03:Alt 键
    • 码值 0x04:GUI 键(例如,Windows 键或 Command 键)
    • 码值 0x05:Caps Lock 键
    • 码值 0x06:Num Lock 键
  3. 导航键(Navigation Key):

    • 码值 0x08:上箭头
    • 码值 0x09:下箭头
    • 码值 0x0A:右箭头
    • 码值 0x0B:左箭头
    • 码值 0x0C:主页键
    • 码值 0x0D:结束键
    • 码值 0x0E:页面上键
    • 码值 0x0F:页面下键
  4. 功能键(Function Key):

    • 码值 0x07:通常表示功能键,但也可以有其他自定义功能键的码值
HID 用途、Linux 按键代码和 Android 按键代码

LKC 列可采用十六进制格式指定 Linux 按键代码。

AKC 列可采用十六进制格式指定 Android 按键代码。

HID 用途HID 用途名称LKCLinux 按键代码名称版本AKCAndroid 按键代码名称备注
0x07 0x0001键盘错误,防冲突功能
0x07 0x0002键盘 POST 失败
0x07 0x0003键盘错误未定义
0x07 0x0004键盘 a 和 A 键0x001eKEY_A1.60x001dKEYCODE_A1
0x07 0x0005键盘 b 和 B 键0x0030KEY_B1.60x001eKEYCODE_B1
0x07 0x0006键盘 c 和 C 键0x002eKEY_C1.60x001fKEYCODE_C1
0x07 0x0007键盘 d 和 D 键0x0020KEY_D1.60x0020KEYCODE_D1
0x07 0x0008键盘 e 和 E 键0x0012KEY_E1.60x0021KEYCODE_E1
0x07 0x0009键盘 f 和 F 键0x0021KEY_F1.60x0022KEYCODE_F1
0x07 0x000a键盘 g 和 G 键0x0022KEY_G1.60x0023KEYCODE_G1
0x07 0x000b键盘 h 和 H 键0x0023KEY_H1.60x0024KEYCODE_H1
0x07 0x000c键盘 i 和 I 键0x0017KEY_I1.60x0025KEYCODE_I1
0x07 0x000d键盘 j 和 J 键0x0024KEY_J1.60x0026KEYCODE_J1
0x07 0x000e键盘 k 和 K 键0x0025KEY_K1.60x0027KEYCODE_K1
0x07 0x000f键盘 l 和 L 键0x0026KEY_L1.60x0028KEYCODE_L1
0x07 0x0010键盘 m 和 M 键0x0032KEY_M1.60x0029KEYCODE_M1
0x07 0x0011键盘 n 和 N 键0x0031KEY_N1.60x002aKEYCODE_N1
0x07 0x0012键盘 o 和 O 键0x0018KEY_O1.60x002bKEYCODE_O1
0x07 0x0013键盘 p 和 P 键0x0019KEY_P1.60x002cKEYCODE_P1
0x07 0x0014键盘 q 和 Q 键0x0010KEY_Q1.60x002dKEYCODE_Q1
0x07 0x0015键盘 r 和 R 键0x0013KEY_R1.60x002eKEYCODE_R1
0x07 0x0016键盘 s 和 S 键0x001fKEY_S1.60x002fKEYCODE_S1
0x07 0x0017键盘 t 和 T 键0x0014KEY_T1.60x0030KEYCODE_T1
0x07 0x0018键盘 u 和 U 键0x0016KEY_U1.60x0031KEYCODE_U1
0x07 0x0019键盘 v 和 V 键0x002fKEY_V1.60x0032KEYCODE_V1
0x07 0x001a键盘 w 和 W 键0x0011KEY_W1.60x0033KEYCODE_W1
0x07 0x001b键盘 x 和 X 键0x002dKEY_X1.60x0034KEYCODE_X1
0x07 0x001c键盘 y 和 Y 键0x0015KEY_Y1.60x0035KEYCODE_Y1
0x07 0x001d键盘 z 和 Z 键0x002cKEY_Z1.60x0036KEYCODE_Z1
0x07 0x001e键盘 1 和 ! 键0x0002KEY_11.60x0008KEYCODE_11
0x07 0x001f键盘 2 和 @ 键0x0003KEY_21.60x0009KEYCODE_21
0x07 0x0020键盘 3 和 # 键0x0004KEY_31.60x000aKEYCODE_31
0x07 0x0021键盘 4 和 $ 键0x0005KEY_41.60x000bKEYCODE_41
0x07 0x0022键盘 5 和 % 键0x0006KEY_51.60x000cKEYCODE_51
0x07 0x0023键盘 6 和 ^ 键0x0007KEY_61.60x000dKEYCODE_61
0x07 0x0024键盘 7 和 & 键0x0008KEY_71.60x000eKEYCODE_71
0x07 0x0025键盘 8 和 * 键0x0009KEY_81.60x000fKEYCODE_81
0x07 0x0026键盘 9 和 ( 键0x000aKEY_91.60x0010KEYCODE_91
0x07 0x0027键盘 0 和 ) 键0x000bKEY_01.60x0007KEYCODE_01
0x07 0x0028键盘返回 (Enter) 键0x001cKEY_ENTER1.60x0042KEYCODE_ENTER1
0x07 0x0029键盘 Esc 键0x0001KEY_ESC3.00x006fKEYCODE_ESCAPE
""""""""2.30x0004KEYCODE_BACK
0x07 0x002a键盘删除 (Backspace) 键0x000eKEY_BACKSPACE1.60x0043KEYCODE_DEL
0x07 0x002b键盘 Tab 键0x000fKEY_TAB1.60x003dKEYCODE_TAB
0x07 0x002c键盘空格键0x0039KEY_SPACE1.60x003eKEYCODE_SPACE
0x07 0x002d键盘 - 和 _ 键0x000cKEY_MINUS1.60x0045KEYCODE_MINUS1
0x07 0x002e键盘 = 和 + 键0x000dKEY_EQUAL1.60x0046KEYCODE_EQUALS1
0x07 0x002f键盘 [ 和 { 键0x001aKEY_LEFTBRACE1.60x0047KEYCODE_LEFT_BRACKET1
0x07 0x0030键盘 ] 和 } 键0x001bKEY_RIGHTBRACE1.60x0048KEYCODE_RIGHT_BRACKET1
0x07 0x0031键盘 \ 和 | 键0x002bKEY_BACKSLASH1.60x0049KEYCODE_BACKSLASH1
0x07 0x0032键盘非美式 # 和 ~ 键0x002bKEY_BACKSLASH1.60x0049KEYCODE_BACKSLASH1
0x07 0x0033键盘 ; 和 : 键0x0027KEY_SEMICOLON1.60x004aKEYCODE_SEMICOLON1
0x07 0x0034键盘 ' 和 " 键0x0028KEY_APOSTROPHE1.60x004bKEYCODE_APOSTROPHE1
0x07 0x0035键盘 ` 和 ~ 键0x0029KEY_GRAVE3.00x0044KEYCODE_GRAVE1
0x07 0x0036键盘 , 和 < 键0x0033KEY_COMMA1.60x0037KEYCODE_COMMA1
0x07 0x0037键盘 . 和 > 键0x0034KEY_DOT1.60x0038KEYCODE_PERIOD1
0x07 0x0038键盘 / 和 ? 键0x0035KEY_SLASH1.60x004cKEYCODE_SLASH1
0x07 0x0039键盘 Caps Lock 键0x003aKEY_CAPSLOCK3.00x0073KEYCODE_CAPS_LOCK
0x07 0x003a键盘 F1 键0x003bKEY_F13.00x0083KEYCODE_F1
""""""""1.60x0052KEYCODE_MENU
0x07 0x003b键盘 F2 键0x003cKEY_F23.00x0084KEYCODE_F2
""""""""1.60x0002KEYCODE_SOFT_RIGHT
0x07 0x003c键盘 F3 键0x003dKEY_F33.00x0085KEYCODE_F3
""""""""1.60x0005KEYCODE_CALL
0x07 0x003d键盘 F4 键0x003eKEY_F43.00x0086KEYCODE_F4
""""""""1.60x0006KEYCODE_ENDCALL
0x07 0x003e键盘 F5 键0x003fKEY_F53.00x0087KEYCODE_F5
0x07 0x003f键盘 F6 键0x0040KEY_F63.00x0088KEYCODE_F6
0x07 0x0040键盘 F7 键0x0041KEY_F73.00x0089KEYCODE_F7
0x07 0x0041键盘 F8 键0x0042KEY_F83.00x008aKEYCODE_F8
0x07 0x0042键盘 F9 键0x0043KEY_F93.00x008bKEYCODE_F9
0x07 0x0043键盘 F10 键0x0044KEY_F103.00x008cKEYCODE_F10
""""""""2.30x0052KEYCODE_MENU
0x07 0x0044键盘 F11 键0x0057KEY_F113.00x008dKEYCODE_F11
0x07 0x0045键盘 F12 键0x0058KEY_F123.00x008eKEYCODE_F12
0x07 0x0046键盘 Print Screen 键0x0063KEY_SYSRQ3.00x0078KEYCODE_SYSRQ
0x07 0x0047键盘 Scroll Lock 键0x0046KEY_SCROLLLOCK3.00x0074KEYCODE_SCROLL_LOCK
0x07 0x0048键盘 Pause 键0x0077KEY_PAUSE3.00x0079KEYCODE_BREAK
0x07 0x0049键盘 Insert 键0x006eKEY_INSERT3.00x007cKEYCODE_INSERT
0x07 0x004a键盘 Home 键0x0066KEY_HOME3.00x007aKEYCODE_MOVE_HOME
""""""""1.60x0003KEYCODE_HOME
0x07 0x004b键盘 Page Up 键0x0068KEY_PAGEUP3.00x005cKEYCODE_PAGE_UP
0x07 0x004c键盘 Delete Forward 键0x006fKEY_DELETE3.00x0070KEYCODE_FORWARD_DEL
0x07 0x004d键盘 End 键0x006bKEY_END3.00x007bKEYCODE_MOVE_END
""""""""1.60x0006KEYCODE_ENDCALL
0x07 0x004e键盘 Page Down 键0x006dKEY_PAGEDOWN3.00x005dKEYCODE_PAGE_DOWN
0x07 0x004f键盘向右箭头键0x006aKEY_RIGHT1.60x0016KEYCODE_DPAD_RIGHT
0x07 0x0050键盘向左箭头键0x0069KEY_LEFT1.60x0015KEYCODE_DPAD_LEFT
0x07 0x0051键盘向下箭头键0x006cKEY_DOWN1.60x0014KEYCODE_DPAD_DOWN
0x07 0x0052键盘向上箭头键0x0067KEY_UP1.60x0013KEYCODE_DPAD_UP
0x07 0x0053键盘 Num Lock 和 Clear 键0x0045KEY_NUMLOCK3.00x008fKEYCODE_NUM_LOCK
0x07 0x0054小键盘 / 键0x0062KEY_KPSLASH3.00x009aKEYCODE_NUMPAD_DIVIDE
0x07 0x0055小键盘 * 键0x0037KEY_KPASTERISK3.00x009bKEYCODE_NUMPAD_MULTIPLY
0x07 0x0056小键盘 - 键0x004aKEY_KPMINUS3.00x009cKEYCODE_NUMPAD_SUBTRACT
0x07 0x0057小键盘 + 键0x004eKEY_KPPLUS3.00x009dKEYCODE_NUMPAD_ADD
0x07 0x0058小键盘 Enter 键0x0060KEY_KPENTER3.00x00a0KEYCODE_NUMPAD_ENTER
0x07 0x0059小键盘 1 和 End 键0x004fKEY_KP13.00x0091KEYCODE_NUMPAD_1
0x07 0x005a小键盘 2 和向下箭头键0x0050KEY_KP23.00x0092KEYCODE_NUMPAD_2
0x07 0x005b小键盘 3 和 PageDn 键0x0051KEY_KP33.00x0093KEYCODE_NUMPAD_3
0x07 0x005c小键盘 4 和向左箭头键0x004bKEY_KP43.00x0094KEYCODE_NUMPAD_4
0x07 0x005d小键盘 5 键0x004cKEY_KP53.00x0095KEYCODE_NUMPAD_5
0x07 0x005e小键盘 6 和向右箭头键0x004dKEY_KP63.00x0096KEYCODE_NUMPAD_6
0x07 0x005f小键盘 7 和 Home 键0x0047KEY_KP73.00x0097KEYCODE_NUMPAD_7
0x07 0x0060小键盘 8 和向上箭头键0x0048KEY_KP83.00x0098KEYCODE_NUMPAD_8
0x07 0x0061小键盘 9 和 Page Up 键0x0049KEY_KP93.00x0099KEYCODE_NUMPAD_9
0x07 0x0062小键盘 0 和 Insert 键0x0052KEY_KP03.00x0090KEYCODE_NUMPAD_0
0x07 0x0063小键盘 . 键(删除键)0x0053KEY_KPDOT3.00x009eKEYCODE_NUMPAD_DOT
0x07 0x0064键盘 Non-US \ 和 | 键0x0056KEY_102ND4.00x0049KEYCODE_BACKSLASH1
0x07 0x0065键盘应用键0x007fKEY_COMPOSE3.00x0052KEYCODE_MENU
""""""""1.60x0054KEYCODE_SEARCH
0x07 0x0066键盘 Power 键0x0074KEY_POWER1.60x001aKEYCODE_POWER
0x07 0x0067小键盘 = 键0x0075KEY_KPEQUAL3.00x00a1KEYCODE_NUMPAD_EQUALS
0x07 0x0068键盘 F13 键0x00b7KEY_F13
0x07 0x0069键盘 F14 键0x00b8KEY_F14
0x07 0x006a键盘 F15 键0x00b9KEY_F15
0x07 0x006b键盘 F16 键0x00baKEY_F16
0x07 0x006c键盘 F17 键0x00bbKEY_F17
0x07 0x006d键盘 F18 键0x00bcKEY_F18
0x07 0x006e键盘 F19 键0x00bdKEY_F19
0x07 0x006f键盘 F20 键0x00beKEY_F20
0x07 0x0070键盘 F21 键0x00bfKEY_F21
0x07 0x0071键盘 F22 键0x00c0KEY_F22
0x07 0x0072键盘 F23 键0x00c1KEY_F23
0x07 0x0073键盘 F24 键0x00c2KEY_F24
0x07 0x0074键盘 Execute 键0x0086KEY_OPEN
0x07 0x0075键盘帮助键0x008aKEY_HELP
0x07 0x0076键盘菜单键0x0082KEY_PROPS
0x07 0x0077键盘 Select 键0x0084KEY_FRONT
0x07 0x0078键盘 Stop 键0x0080KEY_STOP3.00x0056KEYCODE_MEDIA_STOP
0x07 0x0079键盘 Again 键0x0081KEY_AGAIN
0x07 0x007a键盘 Undo 键0x0083KEY_UNDO
0x07 0x007b键盘 Cut 键0x0089KEY_CUT
0x07 0x007c键盘 Copy 键0x0085KEY_COPY
0x07 0x007d键盘 Paste 键0x0087KEY_PASTE
0x07 0x007e键盘 Find 键0x0088KEY_FIND
0x07 0x007f键盘 Mute 键0x0071KEY_MUTE3.00x00a4KEYCODE_VOLUME_MUTE
0x07 0x0080键盘音量调高键0x0073KEY_VOLUMEUP1.60x0018KEYCODE_VOLUME_UP
0x07 0x0081键盘音量调低键0x0072KEY_VOLUMEDOWN1.60x0019KEYCODE_VOLUME_DOWN
0x07 0x0082键盘锁定 Caps Lock 键
0x07 0x0083键盘锁定 Num Lock 键
0x07 0x0084键盘锁定 Scroll Lock 键
0x07 0x0085小键盘逗号键0x0079KEY_KPCOMMA3.00x009fKEYCODE_NUMPAD_COMMA
0x07 0x0086小键盘等号键
0x07 0x0087键盘 International10x0059KEY_RO
0x07 0x0088键盘 International20x005dKEY_KATAKANAHIRAGANA
0x07 0x0089键盘 International30x007cKEY_YEN
0x07 0x008a键盘 International40x005cKEY_HENKAN
0x07 0x008b键盘 International50x005eKEY_MUHENKAN
0x07 0x008c键盘 International60x005fKEY_KPJPCOMMA
0x07 0x008d键盘 International7
0x07 0x008e键盘 International8
0x07 0x008f键盘 International9
0x07 0x0090键盘 LANG10x007aKEY_HANGEUL
0x07 0x0091键盘 LANG20x007bKEY_HANJA
0x07 0x0092键盘 LANG30x005aKEY_KATAKANA
0x07 0x0093键盘 LANG40x005bKEY_HIRAGANA
0x07 0x0094键盘 LANG50x0055KEY_ZENKAKUHANKAKU
0x07 0x0095键盘 LANG6
0x07 0x0096键盘 LANG7
0x07 0x0097键盘 LANG8
0x07 0x0098键盘 LANG9
0x07 0x0099键盘 Alternate Erase 键
0x07 0x009a键盘 SysReq/Attention 键
0x07 0x009b键盘 Cancel 键
0x07 0x009c键盘 Clear 键
0x07 0x009d键盘 Prior 键
0x07 0x009e键盘 Return 键
0x07 0x009f键盘 Separator 键
0x07 0x00a0键盘 Out 键
0x07 0x00a1键盘 Oper 键
0x07 0x00a2键盘 Clear/Again 键
0x07 0x00a3键盘 CrSel/Props 键
0x07 0x00a4键盘 ExSel 键
0x07 0x00b0小键盘 00
0x07 0x00b1小键盘 000
0x07 0x00b2千位分隔符
0x07 0x00b3十进制分隔符
0x07 0x00b4货币单位
0x07 0x00b5货币次单位
0x07 0x00b6小键盘 ( 键0x00b3KEY_KPLEFTPAREN3.00x00a2KEYCODE_NUMPAD_LEFT_PAREN
0x07 0x00b7小键盘 ) 键0x00b4KEY_KPRIGHTPAREN3.00x00a3KEYCODE_NUMPAD_RIGHT_PAREN
0x07 0x00b8小键盘 { 键
0x07 0x00b9小键盘 } 键
0x07 0x00ba小键盘 Tab 键
0x07 0x00bb小键盘 Backspace 键
0x07 0x00bc小键盘 A 键
0x07 0x00bd小键盘 B 键
0x07 0x00be小键盘 C 键
0x07 0x00bf小键盘 D 键
0x07 0x00c0小键盘 E 键
0x07 0x00c1小键盘 F 键
0x07 0x00c2小键盘 XOR 键
0x07 0x00c3小键盘 ^ 键
0x07 0x00c4小键盘 % 键
0x07 0x00c5小键盘 < 键
0x07 0x00c6小键盘 > 键
0x07 0x00c7小键盘 & 键
0x07 0x00c8小键盘 && 键
0x07 0x00c9小键盘 | 键
0x07 0x00ca小键盘 || 键
0x07 0x00cb小键盘 : 键
0x07 0x00cc小键盘 # 键
0x07 0x00cd小键盘空格键
0x07 0x00ce小键盘 @ 键
0x07 0x00cf小键盘 ! 键
0x07 0x00d0小键盘 Memory Store 键
0x07 0x00d1小键盘 Memory Recall 键
0x07 0x00d2小键盘 Memory Clear 键
0x07 0x00d3小键盘 Memory Add 键
0x07 0x00d4小键盘 Memory Subtract 键
0x07 0x00d5小键盘 Memory Multiply 键
0x07 0x00d6小键盘 Memory Divide 键
0x07 0x00d7小键盘 +/- 键
0x07 0x00d8小键盘 Clear 键
0x07 0x00d9小键盘 Clear Entry 键
0x07 0x00da小键盘二进制数
0x07 0x00db小键盘八进制数
0x07 0x00dc小键盘十进制数
0x07 0x00dd小键盘十六进制数
0x07 0x00e0键盘左 Ctrl 键0x001dKEY_LEFTCTRL3.00x0071KEYCODE_CTRL_LEFT
0x07 0x00e1键盘左 Shift 键0x002aKEY_LEFTSHIFT1.60x003bKEYCODE_SHIFT_LEFT
0x07 0x00e2键盘左 Alt 键0x0038KEY_LEFTALT1.60x0039KEYCODE_ALT_LEFT
0x07 0x00e3键盘左 GUI 键0x007dKEY_LEFTMETA3.00x0075KEYCODE_META_LEFT
0x07 0x00e4键盘右 Ctrl 键0x0061KEY_RIGHTCTRL3.00x0072KEYCODE_CTRL_RIGHT
0x07 0x00e5键盘右 Shift 键0x0036KEY_RIGHTSHIFT1.60x003cKEYCODE_SHIFT_RIGHT
0x07 0x00e6键盘右 Alt 键0x0064KEY_RIGHTALT1.60x003aKEYCODE_ALT_RIGHT
0x07 0x00e7键盘右 GUI 键0x007eKEY_RIGHTMETA3.00x0076KEYCODE_META_RIGHT
0x07 0x00e80x00a4KEY_PLAYPAUSE3.00x0055KEYCODE_MEDIA_PLAY_PAUSE
0x07 0x00e90x00a6KEY_STOPCD3.00x0056KEYCODE_MEDIA_STOP
0x07 0x00ea0x00a5KEY_PREVIOUSSONG3.00x0058KEYCODE_MEDIA_PREVIOUS
0x07 0x00eb0x00a3KEY_NEXTSONG3.00x0057KEYCODE_MEDIA_NEXT
0x07 0x00ec0x00a1KEY_EJECTCD3.00x0081KEYCODE_MEDIA_EJECT
0x07 0x00ed0x0073KEY_VOLUMEUP1.60x0018KEYCODE_VOLUME_UP
0x07 0x00ee0x0072KEY_VOLUMEDOWN1.60x0019KEYCODE_VOLUME_DOWN
0x07 0x00ef0x0071KEY_MUTE3.00x00a4KEYCODE_VOLUME_MUTE
0x07 0x00f00x0096KEY_WWW1.60x0040KEYCODE_EXPLORER
0x07 0x00f10x009eKEY_BACK1.60x0004KEYCODE_BACK
0x07 0x00f20x009fKEY_FORWARD3.00x007dKEYCODE_FORWARD
0x07 0x00f30x0080KEY_STOP3.00x0056KEYCODE_MEDIA_STOP
0x07 0x00f40x0088KEY_FIND
0x07 0x00f50x00b1KEY_SCROLLUP3.00x005cKEYCODE_PAGE_UP
0x07 0x00f60x00b2KEY_SCROLLDOWN3.00x005d

KEYCODE_PAGE_DOWN

这里提供谷歌官方有关说明链接: 

键盘设备  |  Android 开源项目  |  Android Open Source Project

### 如何在安卓系统中获取蓝牙遥控器的按键值 要在安卓系统中获取蓝牙遥控器的按键值,可以通过 `getevent` 命令来捕获输入事件并解析其数据流。以下是具体方法: #### 使用 getevent 工具 `getevent` 是 Android 提供的一个工具,用于监控设备上的输入事件。运行此命令可以实时查看来自蓝牙遥控器的输入事件。 执行以下命令以观察蓝牙遥控器产生的事件: ```bash adb shell getevent ``` 当按下蓝牙遥控器按钮时,会显示类似以下的日志信息: ``` /add/dev/input/eventX: 0007 00a0 ffa0 ``` 其中: - **add/dev/input/eventX**: 表示具体的输入设备文件路径。 - **0007**: 协议编号,通常代表消费者控制类 (Consumer Control Class)[^1]。 - **00a0**: 实际的按键码值[^2]。 - **ffa0**: 可能是状态或其他附加信息。 #### 解析日志中的键值 对于上述日志条目,“0007”表明这是一个消费型硬件协议(HID Consumer Page),而“00a0”则是实际的按键码值。如果发现某些按键对应的值始终为 “f0”,这可能意味着这些按键尚未被驱动程序支持或映射到有效的键盘事件[^3]。 #### 修改内核源代码适配新键值 如果遇到未定义的按键,则需手动调整 Linux Kernel 的 hid-input.c 文件来进行适配。操作过程如下: 1. 定位至 kernel 源码目录下的 `/drivers/hid/hid-input.c`; 2. 查找 `case HID_UP_CONSUMER:` 部分,在此处补充新的蓝牙码值及其对应的动作处理逻辑。 完成修改后重新编译内核并将更新后的镜像刷入目标设备即可生效。 #### 示例代码片段 下面展示了一段简单的 Python 脚本用来读取和解释由 `getevent` 输出的数据: ```python import subprocess def read_bluetooth_remote(): process = subprocess.Popen(['adb', 'shell', 'getevent'], stdout=subprocess.PIPE) while True: line = process.stdout.readline() if not line: break parts = line.decode('utf-8').strip().split() # Check for valid event format if len(parts) >= 4 and parts[1].startswith("0007"): key_code_hex = parts[2] value = int(key_code_hex, 16) print(f"Detected Key Code: {hex(value)}") read_bluetooth_remote() ``` 以上脚本利用 ADB 连接远程终端调用 `getevent` 并过滤出属于蓝牙遥控器范围内的消息。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值