Android输入系统 --概述

什么是输入!?就是外界给设备的命令或者消息。

输入从哪里来?到哪里去?做什么事?

当你按下一个手机上的按键,为何手机设备就能如你所愿的动作呢?比如打电话,比如灭屏

哪里来  -- 输入当然是用户的手指动了一下,这是按键接受到了这个指令。

首先我们要有硬件,要有一台机器,并且要有一个可以供输入的设备--按键。

按键为啥会知道你按下去了呢?那么多按键,为何知道现在按下的是哪个按键,甚至同时按下的那几个按键呢?

 

硬件电路中有一个叫做矩阵电路的东西,可以知道

 

这里有16个按键,我们只要检测右边的管脚,就可以知道当前什么按键按下,什么按键没有按下。

这个图是省略的,这里面还需要5V的电源,还需要上拉电阻,这个我不准备详细讲,大家只要知道因为按键按下之后,

右边的管脚会发生不同的变化,根据不同的结果,我们就可以知道用户按下了那些按键。

 

我们现在是知道了应该如何查看现在用户按下了哪些按键,但是用户随时都有可能按键,什么时候去读呢?

难道我们要开一个线程一直循环的读取么?单片机系统很多是这样处理的,难道我们安卓也是这样么?不是

 

安卓系统会有一个硬件电路,叫做KPD Scanner,专门扫描这些管脚,如果一直都是高电平,说明什么按键都没有动,

如果发现有低电平,会产生一个硬件中断,中断这东西好啊,不用什么线程,也不用循环费资源,有事的时候才报告。

 

报告什么呢?报告的时候当然一定是有按键按下,而且会报告已经按下的按键的编码 --> HW keycode

 

报告给谁呢?驱动,报告给驱动,驱动又如何处理呢?

 

安卓分为两部分,上层是Android ,底层驱动是linux,上层一般是手机界面和处理用户需求,而驱动是驱使硬件动作起来。

 

驱动获取到硬件中断后,上报到Android的Framework中,而框架中经过一系列的分发,将按键分配给对应的应用,

对应应用处理这个按键消息,完成了客户的要求。

 

那么整个过程就是如此:

 

用户按下按键 --> 硬件识别到按键按下,并产生硬件中断 --> 驱动获取中断,上报给安卓框架 -->

安卓框架分发给对应的应用处理按键-->对应的应用处理客户的按键需求。

 

我们看看,用户按下了一个按键,其实后面发生了很多事情,最后才完成了用户的需求。

 

posted on 2017-02-07 18:05  old_dog  阅读(142)  评论(0)    收藏  举报

导航