zoukankan      html  css  js  c++  java
  • Android下添加新的自定义键值和按键处理流程

            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,下面是在终端下的打印信息
    [cpp] view plaincopy
     
    1. <span style=< span="">"font-family:FangSong_GB2312;font-size:18px;">shell@orange:/ # cat /proc/bus/input/devices   
    2. I: Bus=0018 Vendor=3697 Product=0001 Version=0001  
    3. N: Name="MStar Smart TV IR Receiver"  
    4. P: Phys=/dev/ir  
    5. S: Sysfs=/devices/virtual/rc/rc0/input0  
    6. U: Uniq=  
    7. H: Handlers=kbd event0   
    8. B: PROP=0  
    9. B: EV=13  
    10. B: KEY=fc0000 0 fc900 142851 0 0 0 0 108000 1a8 c0000c01 9e37c0 48007 f8000000 10000ffc  
    11. B: MSC=10  
    12.   
    13. I: Bus=0000 Vendor=0000 Product=0000 Version=0000  
    14. N: Name="MCE IR Keyboard/Mouse (ir)"  
    15. P: Phys=/input0  
    16. S: Sysfs=/devices/virtual/input/input1  
    17. U: Uniq=  
    18. H: Handlers=kbd mouse0 event1   
    19. B: PROP=0  
    20. B: EV=100017  
    21. B: KEY=30000 0 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe  
    22. B: REL=3  
    23. B: MSC=10  
    24.   
    25. shell@orange:/ #   
    26. shell@orange:/ #   
     
    通过打印信息我们可以知道,我们的终端设备使用的是Vendor_3697_Product_0001.kl文件,我这里只分析IT遥控设备,那我们的Vendor_3697_Product_0001.kl里面又是啥呢,我们可以通过cat命令查看,具体的信息如下:
    [cpp] view plaincopy
     
    1. <span style=< span="">"font-family:FangSong_GB2312;font-size:18px;"># Copyright (C) 2010 The Android Open Source Project  
    2. #  
    3. # Licensed under the Apache License, Version 2.0 (the "License");  
    4. # you may not use this file except in compliance with the License.  
    5. # You may obtain a copy of the License at  
    6. #  
    7. #      http://www.apache.org/licenses/LICENSE-2.0  
    8. #  
    9. # Unless required by applicable law or agreed to in writing, software  
    10. # distributed under the License is distributed on an "AS IS" BASIS,  
    11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
    12. # See the License for the specific language governing permissions and  
    13. # limitations under the License.  
    14.   
    15. #  
    16. # MStar Smart TV IR Receiver.  
    17. #  
    18.   
    19. key 116     POWER                   WAKE  
    20. key 11      0  
    21. key 2       1  
    22. key 3       2  
    23. key 4       3  
    24. key 5       4  
    25. key 6       5  
    26. key 7       6  
    27. key 8       7  
    28. key 9       8  
    29. key 10      9  
    30. key 398     PROG_RED  
    31. key 399     PROG_GREEN  
    32. key 400     PROG_YELLOW  
    33. key 401     PROG_BLUE  
    34. key 103     DPAD_UP  
    35. key 108     DPAD_DOWN  
    36. key 105     DPAD_LEFT  
    37. key 106     DPAD_RIGHT  
    38. key 28      ENTER  
    39. key 402     CHANNEL_UP              WAKE_DROPPED  
    40. key 403     CHANNEL_DOWN            WAKE_DROPPED  
    41. key 115     VOLUME_UP               WAKE_DROPPED  
    42. key 114     VOLUME_DOWN             WAKE_DROPPED  
    43. key 104     PAGE_UP  
    44. key 109     PAGE_DOWN  
    45. key 102     HOME                    WAKE_DROPPED  
    46. key 139     MENU                    WAKE_DROPPED  
    47. key 158     BACK  
    48. key 113     VOLUME_MUTE  
    49. key 167     DVR  
    50. key 138     GUIDE  
    51. key 358     INFO  
    52. #key 82      WINDOW  
    53. #key 79      TV_INPUT  
    54. key 168     MEDIA_REWIND  
    55. key 159     MEDIA_FAST_FORWARD  
    56. key 165     MEDIA_PREVIOUS  
    57. key 163     MEDIA_NEXT  
    58. key 207     MEDIA_PLAY  
    59. key 119     MEDIA_PAUSE  
    60. key 128     MEDIA_STOP  
    61.   
    62. # Common extended  
    63. key 392     SOUND_MODE  
    64. key 212     PICTURE_MODE  
    65. key 372     ASPECT_RATIO  
    66. key 363     CHANNEL_RETURN  
    67. key 142     SLEEP  
    68. key 365     EPG  
    69. key 395     LIST  
    70. #key 370     SUBTITLE  
    71. key 466     MTS  
    72. key 467     FREEZE  
    73. key 468     TTX  
    74. key 469     CC  
    75. key 470     TV_SETTING  
    76. key 471     SCREENSHOT  
    77. key 356     TV_POWER  
    78.   
    79. # Mstar extended  
    80. key 59      MSTAR_BALANCE  
    81. key 60      MSTAR_INDEX  
    82. key 61      MSTAR_HOLD  
    83. key 62      MSTAR_UPDATE  
    84. key 63      MSTAR_REVEAL  
    85. key 64      MSTAR_SUBCODE  
    86. key 65      MSTAR_SIZE  
    87. key 66      MSTAR_CLOCK  

        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的按键值是就是我们新添加的键值了。
  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/muhuacat/p/6089477.html
Copyright © 2011-2022 走看看