android新增键值流程,android按键映射、添加按键

转载:http://blog.csdn.net/louiswangbing/article/details/6610953

http://hi.chinaunix.net/?uid-21747227-action-viewspace-itemid-48301

一:

用户空间的处理

1.处理的内容和流程

触摸屏和轨迹球上报的是坐标、按下、抬起等信息,信息量比较少。按键处理的过程稍微复杂,从驱动程序到Android的Java层受到的信息,键表示方式经过了两次转化,如图8-4所示。

图8-4  Android按键输入的两次转化

键扫描码Scancode是由Linux的Input驱动框架定义的整数类型。键扫描码Scancode经过一次转化后,形成按键的标签KeycodeLabel,是一个字符串的表示形式。按键的标签KeycodeLabel经过转换后,再次形成整数型的按键码keycode。在Android应用程序层,主要使用按键码keycode来区分。

在本地框架层libui的头文件中KeycodeLabels.h,按键码为整数值的格式,其定义KeyCode(枚举值)如下所示:

1.

typedef enum

KeyCode {

2.

kKeyCodeUnknown = 0,

3.

kKeyCodeSoftLeft = 1,

4.

kKeyCodeSoftRight = 2,

5.

kKeyCodeHome = 3,

6.

kKeyCodeBack = 4,

7.

// ...... 省略中间按键码

8.

} KeyCode;

进而在定义了KeycodeLabels.h中定义了从字符串到整数的映射关系,数组KEYCODES,定义如下所示:

1.   static const

KeycodeLabel KEYCODES[] = {    // {字符串,整数}

2.

{ "SOFT_LEFT", 1 },

3.

{ "SOFT_RIGHT", 2 },

4.

{ "HOME", 3 },

5.

{ "BACK", 4 },

6.

{ "CALL", 5 },

7.

{ "ENDCALL", 6 },

8.

{ "0", 7 },                              // ...... 数字按键

9.

{ "1", 8 },

10.

{ "2", 9 },

11.

{ "3", 10 },

12.

{ "4", 11 },

13.

{ "5", 12 },

14.

{ "6", 13 },

15.

{ "7", 14 },

16.

{ "8", 15 },

17.

{ "9", 16 },

18.

{ "STAR", 17 },

19.

// ...... 省略中间按键映射

20.

{ "MENU", 82 },

21.

// ...... 省略中间按键映射

22.

{ NULL, 0 }

23.  };

数组KEYCODES表示的映射关系,左列的内容即表示按键标签KeyCodeLabel,右列的内容为按键码KeyCode(与KeyCode的数值对应)。实际上,在按键信息第二次转化的时候就是将字符串类型KeyCodeLabel转化成整数的KeyCode。

KeycodeLabel的Flags的定义如下所示:

1.   static const

KeycodeLabel FLAGS[] = {

2.

{ "WAKE", 0x00000001 },                  // 可以唤醒睡眠,并通知应用层

3.

{ "WAKE_DROPPED", 0x00000002 },          // 可以唤醒睡眠,不通知应用层

4.

{ "SHIFT", 0x00000004 },                 // 自动附加SHIFT

5.

{ "CAPS_LOCK", 0x00000008 },             // 自动附加CAPS_LOCK

6.

{ "ALT", 0x00000010 },                   // 自动附加ALT

7.

{ "ALT_GR", 0x00000020 },

8.

{ "MENU", 0x00000040 },

9.

{ "LAUNCHER", 0x00000080 },

10.

{ NULL, 0 }

11.  };

KeycodeLabel表示按键的附属标识。

提示:frameworks/base/core/Java/android/view/KeyEvent.Java中定义了类android.view. KeyEvent类,其中定义整数类型的数值与KeycodeLabels.h中定义的KeyCode枚举值是对应的。

在本地框架层libui的头文件中KeyCharacterMap.h,定义了按键的字符映射关

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值