音量键唤醒屏幕--解决电源键坏掉的情况

键盘布局映射文件通常放在/system/usr/keylayout下
文件格式:
键映射文件通常以UTF8文本文件格式存储于设备,通常有如下特性:
注释:用#表示,以#开头的内容都将被忽略。
空白:所有的空行被忽略
键定义:键定义遵循如下格式key SCANCODE KEYCODE [FLAGS...],当扫描码是一个数字,键码定义在你描述的布局文件android.keylayout.xxx。

另外可以设置相关的FLAGS:
SHIFT: 当按下,自动加上SHIFT键值
ALT:当按下,自动加上ALT
CAPS:当按下,自动带上CAPS大写
WAKE:当按下,当设备进入睡眠的时候,按下这个键将唤醒,而且发送消息给应用层。
WAKE_DROPPED:当按下,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。

下面我们以DHD为例,进行修改。
原键盘布局映射文件spade-keypad-v0.k如下:
key 102   HOME              WAKE_DROPPED
key 139   MENU              WAKE_DROPPED
key 158   BACK              WAKE_DROPPED
key 217   SEARCH            WAKE_DROPPED
key 116   POWER             WAKE_DROPPED
key 114   VOLUME_DOWN       WAKE
key 115   VOLUME_UP         WAKE

现在我们就来修改一下,让音量+键也能像电源键那样唤醒屏幕,修改后的内容如下:
key 102   HOME              WAKE_DROPPED
key 139   MENU              WAKE_DROPPED
key 158   BACK              WAKE_DROPPED
key 217   SEARCH            WAKE_DROPPED
key 116   POWER             WAKE_DROPPED
key 114   VOLUME_DOWN       WAKE
key 115   POWER             WAKE_DROPPED


嗯,这是网上的很流行的做法。下面说说个人实际做法。
首先要从 qwerty.kl 这个文件说起。 .kl就是 keylayout 的缩写,也就是键盘布局文件,而 qwerty.kl这个文件是Android系统默认的全键盘布局文件,也就是说,刚开机进入Android系统时,系统默认读取该文件,读取里面的按键映射。【我的索爱X8的qwerty.kl文件内容如下

# Copyright (c) 2009, Code Aurora Forum.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
key 158    BACK             WAKE_DROPPED
key 139    MENU             WAKE_DROPPED
key 102    HOME             WAKE_DROPPED
key 115     VOLUME_UP    WAKE
key 114    VOLUME_DOWN   WAKE
key 215    FOCUS
key 212    CAMERA
key 107    POWER            WAKE_DROPPED

可以看到,里面对Android手机的按键进行了一对一的功能映射,类似于函数的映射。
而里面我们要关注的内容只有这几个
key 115     VOLUME_UP    WAKE
key 114    VOLUME_DOWN   WAKE
WAKE:当按下,当设备进入睡眠的时候,按下这个键将唤醒,而且发送消息给应用层。
WAKE_DROPPED:当按下,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。

但是,前提是手机里面没有用户或者第三方定义的 .kl文件,系统才会默认读取qwerty.kl文件。
例如HTC手机里面的按键映射文件为 spade-keypad-v0.kl,而我的索爱里面有两个= =!分别是:robyn_keypad.kl,   shakira_keypad.kl

【robyn_keypad.kl文件内容】
# Copyright (c) 2009, Code Aurora Forum.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
key 158    BACK             WAKE_DROPPED
key 139    MENU             WAKE_DROPPED
key 102    HOME             WAKE_DROPPED
key 115    VOLUME_UP      WAKE
key 114    VOLUME_DOWN   WAKE
key 215    FOCUS
key 212    CAMERA
key 107    POWER            WAKE_DROPPED
key 217    SEARCH          WAKE_DROPPED
key 116    POWER          WAKE_DROPPED

【shakira_keypad.kl文件内容】
# Copyright (c) 2009, Code Aurora Forum.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
key 158    BACK             WAKE_DROPPED
key 139    MENU             WAKE_DROPPED
key 102    HOME             WAKE_DROPPED
key 115    VOLUME_UP      WAKE
key 114    VOLUME_DOWN   WAKE
key 215    FOCUS
key 212    CAMERA
key 107    POWER            WAKE_DROPPED
key 217    SEARCH          WAKE_DROPPED
key 116    POWER          WAKE_DROPPED

可以看到,这两个文件的内容基本一样,作为主银我也不知道这两个究竟是调用哪一个。所以干脆三个一起修改,三个都将 key 115    VOLUME_UP      WAKE 修改为  key 115   POWER         WAKE_DROPPED

【强调一下,先将 qwerty.kl 或第三方的 .kl文件备份出来,在电脑端修改,然后再用RE管理器复制到/system/usr/keylayout下, 请用EditPlus或者Notepad++这类软件来修改,主页君用的是sublime text2,这是因为这些文件保存格式为UTF-8,手机端修改会引起格式不对

复制完后,记得修改权限,将这几个文件的权限都修改为: 群组,读写;用户,读写;其他,只读
否则的话  4虚拟键映射失效,因为布局文件无法读取。(本人结果是所有按键都不能用,相当麻烦- -)
修改权限的方法为:长按文件,然后选权限

弄完之后,重启手机,大功告成!

实际效果就是,音量键跟电源键一样,可以唤醒屏幕,也可以让屏幕休眠,但是音量键就没用了- -不过听歌时可以通过音乐软件调节音量,这是这种方法的一个BUG,有一些替代方法是使用手机软件,同时也是用音量键,但是这要安装这种软件,该软件就会一直驻在系统进程中,会很耗电,也会拉慢系统速度,所以两种方法随你选择。

这是我找到的一个软件,就是音量键唤醒屏幕的,没安装过
音量键唤醒屏幕--解决电源键坏掉的情况http://bbs.fengbao.com/forum.php?mod=viewthread&tid=1367747&reltid=277413&pre_pos=9&ext=

此外,还可以对添加手机按键映射,但这些已经涉及到底层驱动的问题了,需要在Linux下进行修改驱动,我还没弄到这么深,就不说了。

【最后,对一些有用的资料进行整合】
1、
有时候,我们还需要修改软键盘的键字符映射文件,以便能输入特殊字符,例如当我们输入$的时候,实际上是要输入¥。
下面就讲讲键字符映射文件的修改。

键字符映射位于:/system/usr/keychars下
比如对于一个特定的设备xxx,设置android.keychar.xxx系统属性,用全路径表示去描述所需的键字符映射。如果你没有描述任何一个键字符映射,系统将默认使用/system/usr/keychar/qwerty.kcm.bin

文件格式:
键字符映射文件以二进制减少加载时间的形式存储于设备中,键字符映射文件有如下特征:
注释:以#开始为注释
空行:所有的空行被忽略
列定义:当一个事件来临的时候按下组合键。这个事通常是MODIFIER_SHIFT,MODIFIER_CTRL,MODIFIER_ALT的组合。
                    no modifiers
                    MODIFIER_SHIFT
                    MODIFIER_CONTROL
                    MODIFIER_CAPS_LOCK
                    MODIFIER_ALT


键值定义:键值定义遵循如下规则:

键 扫描码 字符[....]
扫描码和字符通常是一个十进制的值或者是UTF8字符,可以通过strtol的解析。

键字符文件的示例:
下面这个文件来自于android/src/device/product/generic/tuttle2.kcm,代表了一个完整的键字符文件。
以type开始的语句描述了你所要描述键盘的类型,大体分为三种
1:NUMERIC,12键的数字键盘
2:Q14:键盘包括所有的字符,但是可以一键多个字符。
3:QWERTY键盘包括了所有可能的字符和数字,类似于全键盘。


下面是一个QWERTY全键盘的定义示例,因为android主要用于手机,手机一般是全键。
# Copyright 2007 The Android Open Source Project

[type=QWERTY]
# keycode   base    caps    fn      caps_fn number  display_label
          'a'     'A'     '%'     0x00    '%'     'A'
          'b'     'B'     '='     0x00    '='     'B'
          'c'     'C'     '8'     0x00E7  '8'     'C'
          'd'     'D'     '5'     0x00    '5'     'D'
          'e'     'E'     '2'     0x0301  '2'     'E'
          'f'     'F'     '6'     0x00A5  '6'     'F'
          'g'     'G'     '-'     '_'     '-'     'G'
          'h'     'H'     '['     '{'     '['     'H'
          'i'     'I'     '$'     0x0302  '$'     'I'
          'j'     'J'     ']'     '}'     ']'     'J'
          'k'     'K'     '"'     '~'     '"'     'K'
          'l'     'L'     '''     '`'     '''     'L'
          'm'     'M'     '>'     0x00    '>'     'M'
          'n'     'N'     '<'     0x0303  '<'     'N'
          'o'     'O'     '('     0x00    '('     'O'
          'p'     'P'     ')'     0x00    ')'     'P'
          'q'     'Q'     '*'     0x0300  '*'     'Q'
          'r'     'R'     '3'     0x20AC  '3'     'R'
          's'     'S'     '4'     0x00DF  '4'     'S'
          't'     'T'     '+'     0x00A3  '+'     'T'
          'u'     'U'     '&'     0x0308  '&'     'U'
          'v'     'V'     '9'     '^'     '9'     'V'
          'w'     'W'     '1'     0x00    '1'     'W'
          'x'     'X'     '7'     0xEF00  '7'     'X'
          'y'     'Y'     '!'     0x00A1  '!'     'Y'
          'z'     'Z'     '#'     0x00    '#'     'Z'

COMMA       ','     ';'     ';'     '|'     ','     ','
PERIOD      '.'     ':'     ':'     0x2026  '.'     '.'
AT          [email=]'@'[/email]     '0'     '0'     0x2022  '0'     [email=]'@'[/email]
SLASH       '/'     '?'     '?'     '\'     '/'     '/'

SPACE       0x20    0x20    0x9     0x9     0x20    0x20
NEWLINE     0xa     0xa     0xa     0xa     0xa     0xa

# on pc keyboards
TAB         0x9     0x9     0x9     0x9     0x9     0x9
          '0'     ')'     ')'     ')'     '0'     '0'
          '1'     '!'     '!'     '!'     '1'     '1'
          '2'     [email=]'@'[/email]     [email=]'@'[/email]     [email=]'@'[/email]     '2'     '2'
          '3'     '#'     '#'     '#'     '3'     '3'
          '4'     '$'     '$'     '$'     '4'     '4'
          '5'     '%'     '%'     '%'     '5'     '5'
          '6'     '^'     '^'     '^'     '6'     '6'
          '7'     '&'     '&'     '&'     '7'     '7'
          '8'     '*'     '*'     '*'     '8'     '8'
          '9'     '('     '('     '('     '9'     '9'

GRAVE         '`'     '~'     '`'     '~'     '`'     '`'
MINUS         '-'     '_'     '-'     '_'     '-'     '-'
EQUALS        '='     '+'     '='     '+'     '='     '='
LEFT_BRACKET  '['     '{'     '['     '{'     '['     '['
RIGHT_BRACKET ']'     '}'     ']'     '}'     ']'     ']'
BACKSLASH     '\'     '|'     '\'     '|'     '\'     '\'
SEMICOLON     ';'     ':'     ';'     ':'     ';'     ';'
APOSTROPHE    '''     '"'     '''     '"'     '''     '''
STAR          '*'     '*'     '*'     '*'     '*'     '*'
POUND         '#'     '#'     '#'     '#'     '#'     '#'
PLUS          '+'     '+'     '+'     '+'     '+'     '+'


由于键字符映射文件在DHD中不再是文本文件格式,做修改的话我们需要HexEdit或者UltraEdit这类支持16进制代码的工具。
修改前,我们要先查询
http://www.ascii-code.com/ ,查到$对应的16进制HEX码为24,¥对应的16进制HEX码为A5。
然后用UltraEdit打开qwerty.kcm.bin



6. 修改音量键开屏。教程见 http://bbs.anzhi.com/thread-4859012-1-1.html
7. 修改搜索键锁屏。教程见 http://bbs.anzhi.com/forum.php?mod=viewthread&tid=4857191
8. 修改字体。安装字体管家 豌豆荚有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值