前段时间接触GSM模块,基于android源码实现打电话。这里把我自己的从最初的无知整体读懂实现过程,mark下来,其中引用很多网上各位达人的帖子,中间会附上链接,非常感谢他们的share自己的开发经验,让我这后来者得以少走很多弯路O(∩_∩)O~

首先,实现打电话,我得先熟悉其具体流程,不然无头苍蝇源码乱看一通,最后还是无厘头(我就是个典型例子╮(╯▽╰)╭)。下面贴上达人A的打电话流程,从android应用,到ril发送at指令:

1.这里我先简单描述下电话系统的模块:

拨号应用-->phone.apk服务-->ril-->GSM硬件集成

最后面的GSM模块咱就姑且不研究了,毕竟那已经是硬件厂商的事了。

这里值得注意的是:拨号应用和phone.apk的区分。

之前我一直以为android源码里把拨号、通话记录等应用全都实现在phone.apk里,后来我发现我错了,phone.apk只是个服务,并且是系统服务,得放在system/app里面。当一开机这个服务就一直存在着,你kill它,它又会重新启动。并且在phone.apk的AndroidManifest.xml文件里面,并没有相应的启动程序 main入口,即:拨号键盘等界面,所以拨号应用得自己实现或联系人里添加。

上面主要是java部分,接下来是C/C++部分。ril主要可分为:

(1). rild:rild等 (源码路径:android-2.3.1_r1\hardware\ril\rild)

职责:主要负责和ava层建立sokcet通道,接收和传递数据,管理event线程。后面会详细介绍

(2).libril:ril.cpp+ril_event.cpp+ril_commands.h等 (源码路径: android-2.3.1_r1\hardware\ril\libril )

职责:ril.cpp负责解析java传下来的序列化数据,ril_event.cpp主要创建线程,ril_commands.h和ril_unsol_commands.h是一个数组,定义相应的指令编号和相应的解析方法,相应的指令编号在ril/include/telephony/ril.h里被宏定义

(3).reference-ril:reference-ril.c+atChannel.c等 (源码路径: android-2.3.1_r1\hardware\ril\refernece-ril )

职责:reference-ril.c负责接收ril.cpp解析后的数据,发送相应的at指令,atChannel.c写at指令和读at指令从GSM模块中

2.电话系统详细调用流程:

上面这篇文章里很具体的跟踪了从应用按下拨号键到通话的具体调用流程,这里就不在累述了。

我大概知道流程了,接下来source Insight跟踪源码分析:

android 电话 流程,android电话系统和ril分析(1)————概述和电话系统流程相关推荐

  1. android ios 对比 组件_iOS系统和Android系统全面对比

    摘  要 iOS和Android占据当今智能移动终端市场的半壁江山,结合<嵌入式系统>学习的软硬件协同开发等理念,从硬件.软件.用户三个角度进行iOS与Android的比较.其中,硬件选择 ...

  2. android 系统 os 区别,安卓系统和Yun OS系统区别在哪里?还是阿里更会玩

    原标题:安卓系统和Yun OS系统区别在哪里?还是阿里更会玩 目前市面上的安卓手机系统大体有两个分支:Android和YunOS. 先说说安卓吧,现在主流厂商都有做自己的定制系统:比如小米的MIUI. ...

  3. android serviceconnection unbind流程,Android unbindService 流程分析

    基于Android 6.0的源码剖析, 分析bind service的启动流程. /frameworks/base/core/java/android/app/ContextImpl.java /fr ...

  4. 简述Android操作系统和IOS系统的区别;

    软件测试面试题中: 简述Android操作系统和IOS系统的区别: 1.两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制. 2.两者后台制度不同:IOS中任何第三方程序都不能在 ...

  5. android 挂断 电话 反射,android  接听和挂断实现方式

    注意:android2.3版本及以上不支持下面的自动接听方法. (会抛异常:java.lang.SecurityException: Neither user xxxxx nor current pr ...

  6. android电话api,Android电话信息相关API

    Android平台提供的电话信息系统管理功能,主要包括:获取电话信息(设备信息.SIM信息以及网络信息).侦听电话状态(呼叫状态.服务状态.信号强度状态等)和调用电话拨号器. TelephoneMan ...

  7. Android广播接实现电话的监听(电话的状态,拦截)

    Android广播接实现电话的监听 1:需要在AndroidManifest.xml清单中添加权限 <uses-permission android:name="android.per ...

  8. 获取Android版本信息和电话信息

    Android的版本信息可以通过android.os.Build获得,电话信息可以通过TelephonyManager获得,代码如下: private void get_infor(){ sdk = ...

  9. Mono for Android—初体验之“电话拨号器”

    1.Main.axml文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...

最新文章

  1. 一级计算机考试修改信息书面申请表,医院信息科修改数据库申请单.doc
  2. JQuery模拟boostrap模态框效果
  3. gin c.Next()方法
  4. php静态登录界面代码,JSP_JSP登录验证功能的实现,静态的登录界面的设计login.htm - phpStudy...
  5. 浅析GitLab Flow的十一个规则
  6. Qt学习笔记之GUI基本知识
  7. python多线程queue_python多线程+队列(提高爬虫时效性)
  8. 【Spring】学习SpringAOP
  9. java多线程(2)----继承的方式创建多线程
  10. 玩转华为ENSP模拟器系列 | 配置TWAMP Light统计业务示例
  11. 为 SmartDNS 配置广告过滤
  12. Java —— EJB 到底是什么
  13. 如何确定今天是星期几
  14. excel双击后公式计算机,#电脑上的excel表格里的数字为什么要双击才能展开#excel文本双击后变数字...
  15. 18【C语言 趣味算法】“猜牌术”问题
  16. ModuleNotFoundError: No module named ‘win32con‘
  17. 计算机控制技术课程总结
  18. Input搜索框与搜索图标对齐解决方法
  19. 聊天室的功能实现(主要部分)
  20. 宏观经济学 索洛模型

热门文章

  1. 软件工程(2018)第3次团队作业
  2. Go(4 [Map])
  3. 关于solaris中 crontab -e 出现数字0的解决办法
  4. php之防注入程序绕过浅谈
  5. LoadRunner动态连接库函数的调用
  6. ASP.NET Core 下的依赖注入(一)
  7. UITextInputMode
  8. javascript获取asp.net服务器端控件的值
  9. TFS 无法找到新加的Windows用户
  10. High ASCII字符从bat文件到dos控制台的转化问题