android系统按键从linux到java流程(5)

2019-01-07 18:41

ava

3.2.10\\frameworks\\base\\policy\\src\\com\\android\\internal\\policy\\impl\\Policy.jmakeNewWindowManager调用TVWindowManager.java类的构造函数创建对象实例。

dowManager.java

3.2.11\\frameworks\\base\\policy\\src\\com\\android\\internal\\policy\\impl\\TVWinTVWindowManager 类自身没有interceptKeyBeforeQueueing方法,但其继承自PhoneWindowManager类

3.2.12\\frameworks\\base\\policy\\src\\com\\android\\internal\\policy\\impl\\ PhoneWindowManager.java

PhoneWindowManager.java具备最终形态的interceptKeyBeforeQueueing和interceptKeyBeforeDispatching,到此流程走完。

3.3总结

3.2.5中的步骤4)中setWindowManagerCallbacks实际就是创建并设置了PhoneWindowManager类的实例,InputManagerService实现了调用PhoneWindowManager的interceptKeyBeforeQueueing和interceptKeyBeforeDispatching。

总结:

回头看整个按键转换和分发流程,可以归纳为以下几点: 1 原始键值获取

第一层次读取linux键值的进程android_ir_user这个bin文件,由系统脚本init.Hi3798MV100.rc开机拉起. 2 按键分发线程的启动

第二、三层次的按键分发,总源头为SystemServer进程的启动,SystemServer再启动了inputmanagerservice.(SystemServer的启动详细流程参见)。 3牢记转换流程是通用的:

整个按键分发流程,是一个通用的转换和上报过程,最终到达PhoneWindowManager的interceptKeyBeforeQueueing和interceptKeyBeforeDispatching后,按键是以KeyEvent类实例作为参数传入的,并且必须以getKeyCode来访问实际android键值。 所以:

1)如果系统有增加按键的需求,需要修改:

/device/hisilicon/bigfish/system/ir_user/key_pars/key.xml /device/hisilicon/bigfish/system/ir_user/key_pars/linux_key.h /device/hisilicon/bigfish/prebuilts/Vendor_0001_Product_0001.kl /frameworks/native/include/input/KeycodeLabels.h /frameworks/base/core/java/android/view/KeyEvent.java 以上文件一一添加,只要整个过程的转换数据意义对应即可。 另外

/frameworks/base/core/res/res/value/attrs.xml这个文件的作用是给上层APP用的一个资源文件,这个文件如果实际没人用,是不需要修改的;当然为防万一,在增加按键的时候还是把这个同步。

2)如果项目只是需要修改某个键值,比如映射为其他键等: 有两种简单快捷的修改方法: 方法一:

直接修改替换key.xml:

原生的key.xml编译后被放在/system/etc/下面,把要修改的按键在key.xml里面改变其对应的键名即可。 方法二:

可以直接修改KeyEvent.java这个类的getKeyCode方法即可,其他都不需要修改。

比如


android系统按键从linux到java流程(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湿地公园项目运营方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: