其實(shí)此文是一年之前應(yīng)一個(gè)Milestone機(jī)友的求助(返回鍵失靈,希望用搜索鍵替代返回鍵)而寫的,后來又發(fā)到了論壇上,現(xiàn)在拿來就是為了充充門面,讓本博客顯得有點(diǎn)牛逼的樣子。
此文是以Milestone(XT702)為參照所寫,其原理適用于大部分基于Android的設(shè)備(包含但不限于手機(jī)),但是又因Android設(shè)備的高度定制性,此方法不可能完全適用于所有Android設(shè)備,映射值需要參考對(duì)應(yīng)設(shè)備的映射表,不能混用。
Android 使用標(biāo)準(zhǔn)的 linux 輸入事件設(shè)備(/dev/input/)和驅(qū)動(dòng)按鍵定義在 linux 內(nèi)核
include/linux/input.h 中,但是 android 系統(tǒng)沒有直接使用映射后的值,而是對(duì)其再進(jìn)行了一次映射。從內(nèi)核標(biāo)準(zhǔn)鍵值到
android 所用的鍵值映射表定義在 android 文件系統(tǒng)的 /system/usr/keylayout
目錄下。Android標(biāo)準(zhǔn)的鍵值映射表文件為 qwerty.kl,定義如下:
KEY |
鍵值ID |
映射值 |
Flag |
key |
1 |
BACK |
WAKE_DROPPED |
key |
2 |
1 |
|
key |
3 |
2 |
|
key |
4 |
3 |
|
key |
5 |
4 |
|
key |
6 |
5 |
|
key |
7 |
6 |
|
key |
8 |
7 |
|
key |
9 |
8 |
|
key |
10 |
9 |
|
key |
11 |
0 |
|
key |
12 |
MINUS |
|
key |
13 |
EQUALS |
|
key |
14 |
DEL |
|
key |
15 |
TAB |
|
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 |
|
key |
26 |
LEFT_BRACKET |
|
key |
27 |
RIGHT_BRACKE |
|
key |
28 |
ENTER |
|
key |
30 |
A |
|
key |
31 |
S |
|
key |
32 |
D |
|
key |
33 |
F |
|
key |
34 |
G |
|
key |
35 |
H |
|
key |
36 |
J |
|
key |
37 |
K |
|
key |
38 |
L |
|
key |
39 |
SEMICOLON |
|
key |
40 |
APOSTROPHE |
|
key |
42 |
SHIFT_LEFT |
|
key |
43 |
BACKSLASH |
|
key |
44 |
Z |
|
key |
45 |
X |
|
key |
46 |
C |
|
key |
47 |
V |
|
key |
48 |
B |
|
key |
49 |
N |
|
key |
50 |
M |
|
key |
51 |
COMMA |
|
key |
52 |
PERIOD |
|
key |
53 |
SLASH |
|
key |
54 |
SHIFT_RIGHT |
|
key |
56 |
ALT_LEFT |
|
key |
57 |
SPACE |
|
key |
59 |
MENU |
WAKE_DROPPED |
key |
60 |
SOFT_RIGHT |
WAKE |
key |
61 |
CALL |
WAKE_DROPPED |
key |
62 |
ENDCALL |
WAKE_DROPPED |
key |
100 |
ALT_RIGHT |
|
key |
102 |
HOME |
WAKE |
key |
103 |
DPAD_UP |
WAKE_DROPPED |
key |
105 |
DPAD_LEFT |
WAKE_DROPPED |
key |
106 |
DPAD_RIGHT |
WAKE_DROPPED |
key |
107 |
ENDCALL |
WAKE_DROPPED |
key |
108 |
DPAD_DOWN |
WAKE_DROPPED |
key |
114 |
VOLUME_DOWN |
|
key |
115 |
VOLUME_UP |
|
key |
116 |
POWER |
WAKE |
key |
127 |
SEARCH |
WAKE_DROPPED |
key |
139 |
MENU |
WAKE_DROPPED |
key |
150 |
EXPLORER |
|
key |
155 |
ENVELOPE |
|
key |
158 |
BACK |
WAKE_DROPPED |
key |
212 |
CAMERA |
|
key |
215 |
AT |
|
key |
217 |
SEARCH |
WAKE_DROPPED |
key |
227 |
STAR |
|
key |
228 |
POUND |
|
key |
229 |
MENU |
WAKE_DROPPED |
key |
230 |
SOFT_RIGHT |
WAKE |
key |
231 |
CALL |
WAKE_DROPPED |
key |
232 |
DPAD_CENTER |
WAKE_DROPPED |
key
|
399 |
GRAVE |
|
*Flags:
SHIFT: 當(dāng)按下,自動(dòng)加上SHIFT鍵值
ALT:當(dāng)按下,自動(dòng)加上ALT
CAPS:當(dāng)按下,自動(dòng)帶上CAPS大寫
WAKE:當(dāng)按下,當(dāng)設(shè)備進(jìn)入睡眠的時(shí)候,按下這個(gè)鍵將喚醒,而且發(fā)送消息給應(yīng)用層。
WAKE_DROPPED:當(dāng)按下,且設(shè)備正處于睡眠,設(shè)備被喚醒,但是不發(fā)送消息給應(yīng)用層。
只要打開qwerty.kl,將其中對(duì)應(yīng)的Key的ID后面的鍵值改為需要的鍵值即可。再用root
explorer等具有系統(tǒng)文件操作功能的文件管理器把qwerty.kl移動(dòng)到根目錄的/system/usr/keylayout/里覆蓋同名文件即
可。(電腦端建議使用notepad++等文本編輯器打開qwerty.kl文件)
例如:用搜索鍵替代返回鍵:
key 127 SEARCH WAKE_DROPPED
key 217 SEARCH WAKE_DROPPED
參看上面的鍵值映射表可以知道返回鍵的鍵值定義為BACK。 然后需要將qwerty.kl中的對(duì)應(yīng)位置改成
key 127 BACK WAKE_DROPPED
key 217 BACK WAKE_DROPPED
將該文件回拷到手機(jī)上時(shí)最好先放到手機(jī)內(nèi)非/sdcard/的目錄,修改好相應(yīng)的權(quán)限(CHOMD 644以上)之后再拷入/system/usr/keylayout/ ,然后重啟即可。
為了安全起見,在操作之前最好對(duì)手機(jī)進(jìn)行nandroid備份。
參考這種方法,基本可以實(shí)現(xiàn)將任意鍵修改為你所需要的功能。
|