Android系统--输入系统(五)输入系统框架

1. Android设备使用场景:

假设一个Android平板,APP功能、系统功能(开机关机、调节音量)、外接设备功能(键盘、触摸屏、USB外接键盘/鼠标)。

2. 引入输入系统:

(1)触摸屏控制APP (2)外接设备控制系统功能

3. 输入系统三部分

  • 读取事件

  • 分发事件

  • 处理事件

4. 读取事件分析

4.1 读取支持功能
  • 支持多设备

    • GPIO键盘

    • 遥控器

    • 外接USB键盘鼠标

    • 触摸屏

  • 即插即用:可以随时接入或者拨出

  • 支持多语言(映射):同一个同一按键,可能得出不同结果(针对不同国家)

4.2 读取实现
  • Linux驱动

    • GPIO键盘,生成设备节点(/dev/input/event0)

    • 遥控器,生成设备节点(/dev/input/event1)

  • 应用处理

    • open/read 设备节点 /dev/input/event

    • 检测有无数据

    • 检测设备的拔插

    • 处理(映射)

5. 分发事件分析

5.1 分发支持功能
  • 分辨事件

    • 按键(SystemKey:音量键、电源键;GlobaKey:特殊键;UserKey:发给APP)

    • 触摸屏(virtualKey、手势->转化)

  • 发送事件

    • 找出当前APP

    • 发送给APP(源代码分析)

6. 处理事件分析

6.1 处理事件流程分析
  • 点击:执行某些函数

  • 输入框

    • 启动输入框

    • 显示文字

7. 输入系统代码框架

7.1 输入系统代码框架图

7.2 输入系统框架说明

核心:进程间通信(socketpair机制)

  • Reader线程不断循环从设备节点读取数据

  • 映射

  • 发送给InputDispatcher线程

  • 通过windowManagerService确定输入事件

  • 将确定的输入事件需要发送APP

  • APP响应

Android系统--输入系统(五)输入系统框架的更多相关文章

  1. Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序

    Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序 1. 一键启动的过程 1.1 对于global key, 系统会根据global_keys.xml发送消息给某个组件 & ...

  2. Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值

    Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值 题外话:一个问题研究到最后,那边记录文档的前半部分基本上都是没用的,甚至是错误的. 重点在最后,前边不过一些假想猜測. ht ...

  3. Android应用程序框架层和系统运行库层日志系统源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...

  4. Sql Server函数全解<五>之系统函数

    原文:Sql Server函数全解<五>之系统函数  系统信息包括当前使用的数据库名称,主机名,系统错误消息以及用户名称等内容.使用SQL SERVER中的系统函数可以在需要的时候获取这些 ...

  5. Android : 反射机制获取或设置系统属性(SystemProperties)【转】

    本文转载自:https://blog.csdn.net/wei_lei/article/details/70312512 Android.os.SystemProperties 提供了获取和设置系统属 ...

  6. Android震动vibrator(马达)--系统到驱动的流程【转】

    本文转载自:https://blog.csdn.net/tianshiyalin/article/details/17136723 一.前言 本人刚学习安卓驱动开发,水平不能说菜,是根本没有水平,在这 ...

  7. 我是如何一步步编码完成万仓网ERP系统的(二)前端框架

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  8. 我是如何一步步编码完成万仓网ERP系统的(五)产品库设计 1.产品类别

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  9. android 程序防止被360或者系统给kill掉

    关于如果和防止android 程序防止被360kill掉之后重启的问题,肯定大家也搜索了好多方法,都不好使,对不对,什么增高权限了,什么进程优先级了,这些东西都不是我们可控的,所以有没有一些非常保险的 ...

  10. Android 通过应用程序来设置系统的日期和时间中的

    Android 通过应用程序来设置系统的日期和时间中的 android 2.3 android 4.0 测试可行,刚需ROOT权限. import java.io.DataOutputStream; ...

随机推荐

  1. 使用moy快速开发后台管理系统(一)

    moy是什么? moy 是基于模型框架 kero 和 UI 框架 neoui 实现的应用框架,是前端集成解决方案,为企业级应用开发而生.github地址:iuap-design/tinper-moy ...

  2. JavaScript技巧总结和本地存储(一)

    类型检测 typeof 一般用于js的基本数据类型(undefined,number,string,boolean.注意null检测的结构是object)检测,引用类型检测不准确. instanceo ...

  3. 调试时a标签禁止跳转方法

    a.setAttribute("onclick",'');

  4. iOS集成友盟推送

    之前有写过利用Python自己写一个推送服务器, 今天说下如果集成友盟的推送服务 在这之前我们需要做一些准备动作 #1. 注册一个App ID #2. Enable Push Notification ...

  5. Asp.Net Core Authentication Middleware And Generate Token

    .mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...

  6. ACM Fibonacci数 计算

    Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递 ...

  7. [lua] mac上如何编译snapshot(检测Lua中的内存泄露)

    最近我们的unity手游频繁闪退,只要进入战斗场景,之后一段时间就会闪退,如果是在unity编辑器中则会报出not enough memory的错误!猜测应该是有内存泄漏: 由于我们使用了tolua, ...

  8. 利用Socket与硬件通信(智能家居)

    前几天做一个智能家居APP,硬件段使用的是ESP8266WIFI模块,其实不管是WIFI模块还是蓝牙,通信都是同样一个道理,获取IP和端口来进行通信. 我是通过XCOM v2.0 发送信息,移动端接收 ...

  9. HTML5学习笔记<一>: 认识H5

    什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HTML5 仍 ...

  10. Java数据类型及其转换&&经常用到的快捷键

    数据类型 基本数据类型分类 (8种) byte .short. int. long. char. float. double .boolean 1个字节占8位   整数型byte 1字节 -128~1 ...