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 plain copy
 
  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 plain copy
 
  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的按鍵值是就是我們新添加的鍵值了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM