android 添加新的键值,自定义按键

转载 2016年06月02日 11:18:44

Android中,上层可使用的键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?
         对keypad来说,涉及到的文件有以下几个:
        1,/vendor/qcom/7k_ffa_keypad.kl
               首先在此文件中,添加新的键值信息:Example: key   123    WLS   flag
              注意:新加的键值不要与已有的重复。
        2.  kernel/arch/arm/mach-msm/keypad_surf_ffa.c
              在keypad对应的键位添加自定义的键码  如 :123
       3.   frameworks/base/include/ui/keycodeLabels.h
               在数组keycodes 中添加 新定义的信息
                { "MUTE", 91 },  { "WLS" , 92 }
               枚举类型 KeyCode 中添加
                    kKeyCodeMute = 91
                    kKeyCodeWLS  = 92
       4.  frameworks/base/core/res/res/values/attrs.xml
                <enum name="KEYCODE_MUTE"  value="91"/>
               <enum name="KEYCODE_WLS" 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;
              注意:       private static final int LAST_KEYCODE    = KEYCODE_MUTE;
              应改为:   private static final int LAST_KEYCODE    = KEYCODE_WLS;
              
             在函数 public final boolean isSystem() 中,同样需要添加:

                case KEYCODE_SEARCH:
                case KEYCODE_WLS:

            //注意:现在(Android 2.3)这个函数调用的是frameworks\base\libs\ui\Input.cpp中的bool KeyEvent::isSystemKey(int32_t keyCode)
            //这里使用的按键定义在./development/ndk/platforms/android-9/include/android/keycodes.h
             通过以上的更改,新的键值就添加上去了,由于更改了 KeyEvent,影响到了API,
             所以需要make update-api
            
            如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理;
            对于按键事件的处理一般如下文件中
    6.   frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
       
          综上可知,我们可以根据需求定义自己的键值,并对键值所对应的事件信息进行合理化处理。

注:
7k_ffa_keypad.kl是专门给7k_ffa_keypad输入设备使用的keylayout文件,所以修改7k_ffa_keypad.kl 文件只是给键盘输入增加键值。如果是其他设备的输入,如x_input,而且当没有x_iput.kl存在的时候,那么默认的kl文件就是 qwerty.kl(android-root/development/emulator/keymaps/qwerty.kl)
这个很重要。也就是说需要实现明白添加的键值是否是7k_ffa_keypad的input event

 

我的理解:看了一下key character map的处理,是通过读取kcm文件然后使用驱动程序提供的ioctl函数去修改来自输入设备的扫描码和系统预定义的keycode的映射关系。 kl文件应该也可以这么理解。这样的话,对于硬件扫描码,只需要修改这个kl文件。上层得到的都是系统预定义的keycode。

重要补充:

映射关系:ir硬件扫描码在驱动里面被 映射为 kernel/include/linux/input.h里面定义的某个键值。但是这个键值只在linux系统中使用。

Android通过源码目录下的device/xxx/xxx.kl( keylayout )文件完成linux键值到Android系统要使用的键值的映射

Android下添加新的自定义键值和按键处理流程

Android下添加新的自定义键值和按键处理流程     说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我一个问题,请你...
  • tkwxty
  • tkwxty
  • 2015年01月31日 09:37
  • 18825

基于MTK6755平台(Android6.0)添加新按键

1、在DCT tool keypad list 文件中添加新键,如TRIGGER键: KEY_TRIGGER 源码路径: alps/kernel-3.18/tools/dct/old_dct/Keyp...
  • qq_34922234
  • qq_34922234
  • 2016年12月23日 10:28
  • 784

Android添加新键值实现

Android添加新键值实现 1. 为了方便调试,我打开了debug选项,将 KeyInputQueue.java, WindowManagerService.java PhoneWindow...
  • linuxdriverdeveloper
  • linuxdriverdeveloper
  • 2012年02月08日 12:04
  • 4125

Android 添加新的键值,自定义按键

作者:唐老师,华清远见嵌入式学院讲师。 在android中,上层可使用的键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新...
  • farsight2009
  • farsight2009
  • 2014年10月20日 15:49
  • 1123

android 添加新的键值,自定义按键

在android中,上层可使用的键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对...
  • wangxingqian
  • wangxingqian
  • 2013年08月20日 23:33
  • 3191

android遥控器新增自定义的键值+用遥控器按键实现软键盘字符键的切换(amlogice平台) --- (一)

最近的项目客户有个需求,遥控器上要增加两个按键,分别是系统软键盘的DEL键和字符切换键(也就是左下角那个按键)。任务相对来说比较简单,所以安排给我这个新手做,废话不多说,直接上正题,有不对的地方,欢迎...
  • Darren_Mr
  • Darren_Mr
  • 2016年12月15日 19:48
  • 1616

android 中遥控器键值的添加和修改

前言:TV 上遥控器键值怎么样对应到android的系统中,最近一个客户需要在我们的平台上修改,所以,我顺便做了一下总结,方便以后参考。 请转载的朋友一定加上出处,十分感谢~~   第一步: init...
  • jingerppp
  • jingerppp
  • 2013年09月09日 15:50
  • 9616

Android配置蓝牙键值

Android配置蓝牙键值的步骤和一般的键值基本相同,但是有几点区别需要注意kl文件修改蓝牙键值的kl有特殊的形式key usage 0x0c008c HOME第一列表示这是一个键值,第二列可以先不管...
  • u013894427
  • u013894427
  • 2017年09月26日 11:44
  • 467

android 添加一个按键键值

1.frameworks/base/data/keyboards/Generic.kl (键盘布局文件添加键值映射,这里的键值对应kernel里面的键值,按键名字对应上层keycodes.h里面定义...
  • u012719256
  • u012719256
  • 2016年09月13日 15:05
  • 704

Unity3D中自定义键值

在用Unity3D开发跨平台游戏的时候很多时候需要对接各种不同设备,这个时候就需要游戏按键可以兼容各种市场上的遥控器键值,虽然大部分遥控器键值相对统一,但是还是有个别遥控器键值相对个性一点,这个时候就...
  • leo347
  • leo347
  • 2017年06月15日 11:39
  • 257
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 添加新的键值,自定义按键
举报原因:
原因补充:

(最多只允许输入30个字)