歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android鍵盤輸出增加按鍵碼

開發過程中免不得需要增加或減少按鍵碼值,在Android2.3系統事件處理部分,主要向上層提供統一的按鍵碼(KeyCode),這個按鍵碼是一個整數,在上層的JAVA程序中主要通過這個值來判斷系統的實現。

關於輸入事件的處理前面已經講過,請參考:http://www.linuxidc.com/Linux/2012-01/50691.htm

這裡主要講android事件的處理過程,需要經過兩個轉換步驟: 

  1、鍵掃描碼ScanCode是由linux的Input驅動框架定義的整數類型,可參考input.h頭文件

         在步驟一中將其值轉換成表示按鍵的字符串

        鍵盤布局文件(*.kl)將完成第一步的轉換,放在/system/usr/keylayout/下面

        舉例如下:

        input.h 中字母鍵定義:

        #define KEY_Q 16
#define KEY_W 17
#define KEY_E 18
#define KEY_R 19
#define KEY_T 20
#define KEY_Y 21
#define KEY_U 22
#define KEY_I 23
#define KEY_O 24
#define KEY_P 25       

       而qwert.kl中定義如下:

       ScanCode + 字符串值      

      key 16    Q
key 17    W
key 18    E
key 19    R
key 20    T
key 21    Y
key 22    U
key 23    I
key 24    O
key 25    P    

   2、通過查找KEYCODES數組,將literal字符串轉換成value的整型值,即轉換到KeyCode值了

       片段如下,右邊的值是android系統中使用的KeyCode值:(文件路徑:frameworks/base/include/ui/KeycodeLabels.h)

static const KeycodeLabel KEYCODES[] = {


    ...

    { "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 },


    ...

};

   右邊的值在android中定義如下:(文件路徑:frameworks/base/include/android/keycodes.h)

  /*
 * Key codes.
 */
enum {

     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,

   ..

};

Copyright © Linux教程網 All Rights Reserved