首先要移植的是遥控器的驱动。此略。驱动中确定linux键值与ir键值的对应关系。
本文主要谈遥控器在framwork层的移植。
第一步:
首先修改按键映射文件。gingerbread/sdk/emulator/keymaps/qwerty.kl。该文件确定了linux键值与android键值的对应关系。
注意事项:linux键值的选择不是没有限制的。选择不当,可能会导致上层不能获取到键值。
第二步:
修改framework下的文件:
gingerbread/frameworks/base/core/java/android/view/KeyEvent.java
gingerbread/frameworks/base/include/ui/KeycodeLabels.h
gingerbread/frameworks/base/core/res/res/values/attrs.xml
gingerbread/frameworks/base/libs/ui/Input.cpp
gingerbread/frameworks/base/native/include/android/keycodes.h
gingerbread/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
修改内容:增加按键支持,对原生按键采用input.h中对应宏定义,对非标准按键采用input.h中功能键宏定义。
在KeyEvent.java文件中,对新增加的按键需要添加类似如下注释:
-
<prename="code"class="java">
-
publicstaticfinalintKEYCODE_F1=135;
-
</pre><spanstyle="font-size:18px">或者在terminal下运行:makeupdate-api</span>
-
<p></p>
-
<p><spanstyle="font-size:18px">否则会报错。</span></p>
-
<p><spanstyle="font-size:18px">此外,还需要将privatestaticfinalintLAST_KEYCODE的值进行修改,改为android键值的最大值。</span></p>
-
<p><spanstyle="font-size:18px"><spanstyle="font-size:18px">PhoneWindowManager.java</span>主要是对一些特殊按键的处理,比如HOME,POWER等。</span></p>
-
<pre></pre>
-
<pre></pre>
-
<pre></pre>
在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系统要使用的键值的映射
根据两个源码的对比:
KeycodeLabels.h
attrs.xml
keycodes.h
三个文件有改动
特别注意:
在文件device/xxx/xxx/xxx.kl(即键值对)文件中,重新建立按键扫描码与系统自定义的按键名称的映射关系
按键扫描码可以通过串口中输入getevent,然后点击按钮时看打印信息获得
扫描码不能重复,否则该文件失效
分享到:
相关推荐
RK3128平台android系统添加修改遥控器键值参考文档,input.h中定义的键值在KeyEvent.java中不一定有定义哦,如果需要添加新的键值,可参考KeyEvent.java中添加新键值的那段注释。
### Android按键的键值详解 在Android开发过程中,理解并掌握按键的键值对于实现设备交互功能至关重要。本文将深入探讨部分重要的Android按键键值及其应用场景。 #### 基本概念 在Android系统中,按键事件是通过`...
查看android上遥控器,或者虚拟按键的键值。安装后按遥控器就会显示对应键值
Android 电视TV 遥控器键值对应表 互联网盒子 电视机顶盒
- **动手实践**: 尝试修改源代码,创建新的测试用例,以加深对Android键值存储的理解。 总之,“Android键值测试apk源代码”提供了宝贵的教育资源,让我们能够深入理解Android应用中的键值存储和测试策略,对于...
3. Android系统中的键值修改: 如果是在Android环境中,我们可以使用SharedPreferences来存储键值对,它们类似于简单的键值存储数据库。通过`SharedPreferences.Editor` 提供的方法如`putString()` 和 `apply()` 或...
标题中的“WIFI小车修改键值”暗示了这是一个与无线网络控制的智能小车相关的项目,其中可能涉及到了对小车控制指令的修改。在实际应用中,这样的小车通常由微控制器(如STM32)驱动,并通过Wi-Fi模块接收来自...
总结来说,Java Properties类是Android开发中一个简单但实用的工具,用于处理键值对数据。在实际项目中,可以根据需求选择原生的Properties类或是增强版的XProperties类,以满足各种存储场景的需求。在使用过程中,...
在Android系统中,键盘监控通常涉及对用户输入的检测,这在特定的开发场景下具有重要意义,例如测试、安全分析或者特殊应用需求。本项目"Android键盘监控源码,检测按键"提供了一种方法来捕获和分析Android设备上的...
这个"安卓SQLite数据库相关-Android安全简单的键值对数据存储库源码.rar"压缩包文件包含了用于创建一个安全且简单键值对数据存储的源代码。以下是对这个主题的详细说明: 1. SQLite基础: SQLite是一个开源的关系...
本案例中,我们关注的是"msm8909屏幕修改提交记录.7z"这一压缩包文件,它涉及到高通骁龙8909 SoC(System on Chip)上的LCD(Liquid Crystal Display)驱动移植的过程。这个文件很可能是为学习LCD驱动如何适应高通...
总的来说,自定义按键开发需要对Android内核驱动和框架层有深入理解,通过修改内核配置和框架层的键值映射,可以实现对硬件按键的定制化处理,满足各种应用场景的需求。在全志R818这样的平台上,这一过程尤其重要,...
3、检查audio的配置,打上patch后,首先确认小机上文件是否有修改到,目前文件可能位于/vendor/etc或/system/etc目录下,其中/vendor/etc下的配置文件是优先解析的。确保文件无误后,通过dumpsys media.audio_policy...
"Kissme"就是这样一个专为Android设计的开源库,它提供了一个简单易用的加密键值存储解决方案。 **Kissme 库的核心功能** 1. **加密存储**: Kissme 使用强大的加密算法(如AES)来对键值对进行加密,确保即使数据...
本资源包包含了两份宝贵的文档——"Android修改按键驱动.pdf"和"Android键盘映射.pdf",它们深入浅出地介绍了如何在这个开放源码的平台上进行按键功能的定制。以下是这两份文档可能涵盖的关键知识点: 一、Android...
2. **创建Editor对象**:用于编辑SharedPreferences中的数据,例如添加新的键值对或修改已有键值对。 ```java SharedPreferences.Editor editor = preferences.edit(); ``` 3. **设置初始密码**:使用`putString()...
3. **权限管理**:在Android系统中,应用需要相应的权限才能访问和修改数据。这个库可能已经处理了这些权限问题,允许开发者在没有额外配置的情况下使用。 4. **Android SDK集成**:为了方便开发者,库通常会提供...
这可能需要额外的文本编辑和存储机制,可以使用SharedPreferences来保存简单的键值对,或者在数据库中创建新的表来存储便签内容。 总的来说,开发这个“安卓Android记账本app”需要掌握Android开发的基础知识,包括...
本资源提供了解决Android APK批量打包过程中的一些关键问题,包括渠道号替换、服务器地址替换、资源替换以及指定文件修改和修改包名等操作。下面将详细解释这些知识点。 1. **渠道号替换**: 在Android应用发布时...