久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

 

Android 添加新的鍵值,自定義按鍵

作者:唐老師,華清遠見教育科技集團講師。

在android中(zhong),上層可(ke)使(shi)用的(de)(de)鍵值(zhi)(zhi)(zhi)默(mo)認情(qing)況(kuang)下是(shi)92個(ge),從(cong)0-91;一般情(qing)況(kuang)下,這(zhe)些鍵值(zhi)(zhi)(zhi)是(shi)夠用的(de)(de),但是(shi)如果想擴充的(de)(de)話,還是(shi)需要(yao)添加新的(de)(de)鍵值(zhi)(zhi)(zhi)的(de)(de),那么如何將一個(ge)新的(de)(de)鍵值(zhi)(zhi)(zhi)從(cong)驅動的(de)(de)設置映射到上層,使(shi)應用可(ke)以對我們自(zi)定義的(de)(de)鍵值(zhi)(zhi)(zhi)進行相應的(de)(de)處理(li)呢(ni)?

對(dui)keypad來說,涉及到的(de)文件(jian)有以下幾個:

1,/vendor/qcom/7k_ffa_keypad.kl

首先在此(ci)文件中,添加新(xin)的鍵(jian)值(zhi)信息:Example:

key   123    WLS   flag

注意:新加的(de)鍵(jian)值(zhi)不要與已有的(de)重復。

2. kernel/arch/arm/mach-msm/keypad_surf_ffa.c

在keypad對應的(de)鍵位添加自定義(yi)的(de)鍵碼(ma) 如 :123

3. frameworks/base/include/ui/keycodeLabels.h

在數組(zu)keycodes 中添加 新定(ding)義(yi)的信息

{ "MUTE", 91 }, { "WLS" , 92 }

枚舉(ju)類型 KeyCode 中添加

kKeyCodeMute = 91

kKeyCodeWLS = 92

4. frameworks/base/core/res/res/values/attrs.xml

<enum  name="KEYCODE_MUTE"  value="91"/>

<;enum name="KEYCODE_WLS&quot; value="92" />

5.   frameworks/base/core/java/android/view/KeyEvent.java

public static final int KEYCODE_MUTE = 91;

public static final int KEYCODE_WLS = 92;

注意(yi): private static final int LAST_KEYCODE = KEYCODE_MUTE;

應改為: private static final int LAST_KEYCODE = KEYCODE_WLS;

在函數(shu) public final boolean isSystem() 中(zhong),同(tong)樣需(xu)要添加:

case KEYCODE_SEARCH:

case KEYCODE_WLS:

//注意:現(xian)在(Android 2.3)這(zhe)個函數調用的是frameworks\base\libs\ui\Input.cpp中的bool KeyEvent::isSystemKey(int32_t keyCode)

//這里使用(yong)的按鍵定(ding)義在./development/ndk/platforms/android-9/include/android/keycodes.h

通(tong)過以上(shang)的更改(gai),新(xin)的鍵值就添加上(shang)去了(le),由于更改(gai)了(le) KeyEvent,影響到了(le)API,

所以需(xu)要make update-api

如果對新鍵值進行處(chu)理,可以通過獲(huo)取(qu)相應的keycode,對它(ta)進行處(chu)理;

對(dui)于按鍵事件(jian)的處理一(yi)般如下文件(jian)中

6. frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java

綜(zong)上(shang)可知,我們(men)可以(yi)根據(ju)需求定義自己的鍵值(zhi),并對鍵值(zhi)所對應的事件信息進行合理(li)化處理(li)。

注:

7k_ffa_keypad.kl是(shi)(shi)(shi)專門給7k_ffa_keypad輸(shu)(shu)入(ru)(ru)設(she)備(bei)使(shi)用的(de)keylayout文(wen)件(jian),所以修改(gai)7k_ffa_keypad.kl文(wen)件(jian)只是(shi)(shi)(shi)給鍵盤輸(shu)(shu)入(ru)(ru)增(zeng)加(jia)鍵值。如果是(shi)(shi)(shi)其(qi)他設(she)備(bei)的(de)輸(shu)(shu)入(ru)(ru),如x_input,而且當沒(mei)有x_iput.kl存在的(de)時候(hou),那(nei)么默認(ren)的(de)kl文(wen)件(jian)就(jiu)是(shi)(shi)(shi) qwerty.kl(android-root/development/emulator/keymaps/qwerty.kl) 這個很(hen)重要(yao)(yao)。也就(jiu)是(shi)(shi)(shi)說需(xu)要(yao)(yao)實現明白添(tian)加(jia)的(de)鍵值是(shi)(shi)(shi)否是(shi)(shi)(shi)7k_ffa_keypad的(de)input event

我的理解:看了一下(xia)key character map的處理,是通過讀取kcm文(wen)件(jian)(jian)然后使用驅動程序提(ti)供的ioctl函數去修改來自輸入設備的掃描碼和系(xi)統(tong)預定(ding)義的keycode的映(ying)射關系(xi)。 kl文(wen)件(jian)(jian)應該也可(ke)以這(zhe)么(me)理解。這(zhe)樣的話,對于硬件(jian)(jian)掃描碼,只(zhi)需要修改這(zhe)個kl文(wen)件(jian)(jian)。上層(ceng)得(de)到的都是系(xi)統(tong)預定(ding)義的keycode。

重要補充:

映(ying)射(she)關(guan)系:ir硬件掃描碼在驅動里面(mian)(mian)被(bei) 映(ying)射(she)為(wei) kernel/include/linux/input.h里面(mian)(mian)定義的某個鍵(jian)值。但是這個鍵(jian)值只在linux系統(tong)中使(shi)用。

Android通過源碼目(mu)錄下的(de)device/xxx/xxx.kl( keylayout )文件完(wan)成linux鍵值(zhi)到(dao)Android系統要(yao)使(shi)用(yong)的(de)鍵值(zhi)的(de)映射