免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 824 | 回复: 0
打印 上一主题 下一主题

13-Android MID 新按钮定义 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:41 |只看该作者 |倒序浏览
1.Android使用标准的linux输入事件设备(/dev/input目录下)和驱动,按键定义在内核include/linux/input.h文件中,
按键定义形式如下:
#define KEY_ESC 1

2.内核中在board文件中定义按钮gpio_keys_button时需要指定该按钮的code值,如:
static struct gpio_keys_button gpio_buttons[] = {
{
.code = KEY_ESC,
.gpio = 18,
.desc = "user",
.wakeup = 1,
},
};

3.上面实现了从硬件GPIO口到内核标准按键的映射,但是android并没有直接使用映射后的键值,而且对其再进行了一次映射,从内核标准键值到android所用键值的映射表定义在android文件系统的/system/usr/keylayout目录下。标准的映射文件为qwerty.kl,定义如下:
key 1     new

4.如果需要增加按键,则需要在frameworks/base/include/ui/KeycodeLabels.h在数组keycodes 中添加 新定义的信息,如:
{ "new" , 150 }

frameworks/base/core/res/res/values/attrs.xml中增加:
<enum name="KEYCODE_new" value="150"/>

frameworks/base/core/java/android/view/KeyEvent.java中增加:
public static final int KEYCODE_new  = 150;

以上的更改,新的键值就添加上去了,由于更改了 KeyEvent,影响到了API,所以需要make update-api

5.frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java负责处理按键事件。例如需要增加一个按键触发静音模式,则修改其interceptKeyBeforeQueueing()代码,增加:
if (keyCode == KeyEvent.KEYCODE_new)  {
final IAudioService audio = getAudioInterface();
if (audio == null) {
return;
    }
try {
audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
} catch(Exception ex) {
}
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP