这几天在公司看 Android 系统里的工程模式方面的代码。工程模式就是拿来测试手机的,普通用户会打开工程模式的很少,但作为一名 Android 手机的开发者来说,就必须知道了。其实就是在手机拨号盘输入特定混合数字和 *# 的字符串,进入特殊的界面。如输入 *#06# 可以查看手机IMEI号,*#*#4636#*#*  可以查看手机的一些信息等。下面我来通过我所查看的系统源码来说明这是怎样的一个过程。

首先找到源码目录下  packages/apps/Dialer  这个应用,这是一个拨号应用,我们平常拨打电话用的就是这个 app。找到该 app 里 DialpadFragment.java 这个文件,如下图

里面有个监听 EditText 获取数字变化后的回调方法 afterTextChange

在这个方法里又调用了 handleChars,进入到 handleChars 方法里如下:

该方法定义位于,如果相关宏控打开的话,则会执行

handleCustomCode()方法。进入该方法:

在该方法里传入了一个 intent,发送了一条广播。我们继续查找这条广播的接收者,我们在 EmodeReceiver.java 找到了该广播接受者,路径如下:

在这个文件中,,可以看到这么一段代码:

在收到这条广播后,调用了 startActivityByCode 方法,从该方法名字就可以看出,是通过不同的 Code 来跳转到不同的 Activity,而该 code 就是用户从拨号盘输入的字符。

我们进入到 startActivityByCode 方法中,,看看该方法是怎么实现的,该方法同样位于 EmodeReceiver.java 文件中,在该方法中,我们很容易看到这么一段代码:

switch-case语句,很明显,底层就是通过这种方式来根据用户输入在拨号盘输入不同的字符来进入特定的工程模式界面的。但是仔细一看,,问题来了,我们在键盘输入的都是数字+*#号,这A,B是咋回事?往上一看:

这样我们就明白了,这里把 * 和 # 号全部替换成了 A 和 B。

至此,工程模式的启动过程就完成了。我们再来总结一下这个过程,首先用户在拨号盘输入特定的字符串,DialpadFragment 里的回调方法 afterTextChange 监听到拨号盘的EditText里内容变化后,如果变化后后的字符串跟特定某些的字符串一致,则会进行相应的处理并发送一条广播,并将这个字符串一同放进广播中,该广播的接收者受到这条广播后,获取到里面的字符串,然后打开与该字符串对应的 Activity。由拨号盘界面到工程模式界面的启动就此完成!

Android系统工程模式启动过程详解相关推荐

  1. Android FrameWork——Activity启动过程详解

    前面发了blog分析了ActivityManager框架的大体结构,主要就是一个进程通信机制,今天我通过深入Activity的启动过程再次深入到ActivityManager框架,对其进行一个更深入的 ...

  2. Linux开启动过程详解

    Linux开启动过程详解 Linux启动过程 前言: Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布.在加上用户空间的应用程序之后 ...

  3. centos7 启动流程图_Linux启动过程详解

    Linux启动过程详解 作者:江远航 一.启动流程图如下 图1 Linux启动流程图 BIOS ---> MBR ---> Kernel---> Init 二.Linux启动顺序 一 ...

  4. 朱老师ARM裸机学习笔记(四):S5PV210启动过程详解

    常用器件特性 内存: SRAM 静态内存 特点就是容量小.价格高,优点是不需要软件初始化直接上电就能用 DRAM 动态内存 特点就是容量大.价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使 ...

  5. linux efi 启动原理,Linux(RHEL6)启动过程详解

    Linux(RHEL6)启动过程详解 Linux(红帽RHEL6)启动过程详解: RHEL的一个重要和强大的方面是它是开源的,并且系统的启动过程是用户可配置的.用户可以自由的配置启动过程的许多方面,包 ...

  6. android strictmode有什么作用,Android严苛模式StrictMode使用详解

    StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...

  7. 嵌入式linux的u-boot系统启动过程,【站友投递】U-boot启动过程详解

    [站友投递]U-boot启动过程详解 来源:互联网 作者:denny 时间:2009-03-18 Tag:点击: 一.U-BOOT的目录结构 u-boot目录下有18个子目录,分别存放管理不通的源程序 ...

  8. 家用计算机启动过程 装载主引导记录,计算机启动过程详解

    综述: 计算机启动时经过了哪些过程: 计算机接通电源后,第一步要进行加电自检,也就是POST(Power On Self Test),检查RAM.驱动器等:第二步BIOS会读取活动分区主引导记录的启动 ...

  9. Delta3d框架学习--程序启动过程详解

    一个Delta3d程序启动过程详解 一.初始化一个dtGame::GameApplication的实例,dtGame::GameApplication* app = new dtGame::GameA ...

  10. Android签名与校验过程详解

    原文:https://blog.csdn.net/gulinxieying/article/details/78677487 目 录 一.签名与校验原理概要    2 1.数字签名简介    2 2. ...

最新文章

  1. 获取checkbox所选中的值
  2. SAP批次级别的意义及启用操作
  3. 全面讲解OpenStack技术知识
  4. Oracle 分区表的 FOR 语句,你这样用过吗?
  5. html二维坐标系转换,旋转坐标系 转换工具
  6. 昆明钟英高中2021年高考成绩查询,昆明官渡钟英中学2021年排名
  7. Excel 使用技巧集锦—163种技巧
  8. git整理——廖雪峰教程笔记
  9. linux怎么用中文显示,linux中文显示设置
  10. 学习统计学,必看的书单推荐
  11. Word高效指南 - 如何批量删除空格空白行
  12. SSM车辆维修管理系统毕业设计总结篇
  13. 山东标梵讲解APP开发与技术公司之间的联系
  14. 电脑开机内存占用过高处理
  15. 使用Python获取股市北向资金和南向资金信息
  16. kubeadm部署k8s集群
  17. bmob php支付,Bmob支付
  18. expected scalar type Double but found Float
  19. 嵌入式Linux驱动学习【9】—— Nor Flash
  20. Linux 查看tomcat占用的端口号

热门文章

  1. 关于Nginx跨域配置的一些问题,详解如何正确的配置跨域
  2. PLC 控制三相异步电动机正反转实验
  3. 南京邮电大学电子电路课程设计可编程音乐自动演奏电路
  4. 计算机信息检索自考知识点,计算机信息检索02139自考资料.doc
  5. 02、差分特性阻抗仿真
  6. librdkafka 封装的C++类
  7. HTML中包含地图和筛选条件,如何实现DedeCMS多条件筛选并以筛选词为标题
  8. H5打开APP技术总结
  9. 基金业绩的python分析_DFQ2018绩效归因与基金投资分析工具.pdf
  10. winrara注册文件