`
xwangly
  • 浏览: 131045 次
  • 性别: Icon_minigender_1
  • 来自: 鄂州
社区版块
存档分类
最新评论

转:android 电话流程分析

阅读更多
dial流程
Activity.java (frameworks\base\core\java\android\app):
public boolean onKeyDown(int keyCode, KeyEvent event)
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" str));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

RecentCallsListActivity.java (packages\apps\contacts\src\com\android\contacts):
setDefaultKeyMode(DEFAULT_KEYS_DIALER);
PhoneUtils.java (packages\apps\phone\src\com\android\phone)
static int placeCall(Phone phone, String number, Uri contactRef)
Connection cn = phone.dial(number);
GSMPhone()
dial (String dialString)
mCT.dial(mmi.dialingNumber, mmi.getCLIRMode());
CallTracker mCT;
CallTracker类 dial (String dialString)
dial (String dialString, int clirMode)
cm.dial(pendingMO.address, clirMode, obtainCompleteMessage());

//因为 RIL.java (frameworks\base\telephony\java\com\android\internal\telephony\gsm):
//public final class RIL extends BaseCommands implements CommandsInterface所以 cm.dial
//实际上调用的是 RIL.java 中的dial
dial (String address, int clirMode, Message result)
RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
send()
msg.sendToTarget();
target.sendMessage(this);
//Handler.java (frameworks\base\core\java\android\os)
boolean sendMessage(Message msg)
//Handler.java (frameworks\base\core\java\android\os)
return sendMessageDelayed(msg, 0);
return sendMessageAtTime(msg, SystemClock.uptimeMillis() delayMillis);
sent = queue.enqueueMessage(msg, uptimeMillis);
//把消息放入到消息队列
public void handleMessage(Message msg)
s.getOutputStream().write(dataLength);
s.getOutputStream().write(data);
因为在 RIL.java 文件中有 static final String SOCKET_NAME_RIL = "rild";
run()函数中有:
s = new LocalSocket();
l = new LocalSocketAddress(SOCKET_NAME_RIL,
LocalSocketAddress.Namespace.RESERVED);
s.connect(l);
...
mSocket = s;

所以我们可以确定s.getOutputStream().write(data) 是往 rild 的socket写数据。
下面为 rild 收到数据后的处理流程。
static void processCommandsCallback(int fd, short flags, void *param)
processCommandBuffer(p_record, recordlen);
status = p.readInt32(&request);
pRI->pCI = &(s_commands[request]);
pRI->pCI->dispatchFunction(p, pRI);
因为 RIL.java (frameworks\base\telephony\java\com\android\internal\telephony\gsm):
中dail函数中有:
RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
而 Ril_commands.h (hardware\ril\libril):中有:
{RIL_REQUEST_DIAL, dispatchDial, responseVoid},
所以此时执行的是 Ril.cpp (hardware\ril\libril)文件中的:
static void dispatchDial (Parcel& p, RequestInfo *pRI)
s_callbacks.onRequest(pRI->pCI->requestNumber, NULL, 0, pRI);
case RIL_REQUEST_DIAL:
requestDial(data, datalen, t);
asprintf(&cmd, "ATD%s%s;", p_dial->address, clir);
ret = at_send_command(cmd, NULL);
err = at_send_command_full (command, NO_RESULT, NULL,NULL, 0, pp_outResponse);
at_send_command_full_nolock()
err = writeline (command);
补充:
BaseCommands.java (frameworks\base\telephony\java\com\android\internal\telephony\gsm):
public abstract class BaseCommands implements CommandsInterface
[android] trace radio interface layer (RIL) by two emulators
http://i-miss-erin.blogspot.com/2009/04/android-trace-radio-interface-layer-ril.html
How to dial out a call in Android? I traced the radio log and make sure the whole procedure and the source code.[/size][size=x-small][size=small][/size]
分享到:
评论

相关推荐

    Android 电话流程过程详细分析(Phone模块 )

    Phone服务:是指 Phone所能提供的各种服务(来电去电,短信,SIM的锁定,数据连结传输等)与 service不是同一个概念。

    android电话系统数据流程分析

    首先抛开Android的一切概念来研究一下电话系统的最基本的描述。我们的手机首先用来打电话的,随后是需要一个电话本,随后是PIM,随后是网络应用,随后是云计算,随后是想我们的手机无所不能,替代PC。但是作为一个...

    Android电话拨打流程源码分析.docx

    本文基于Android5.0的流程分析了AOSP中拨打电话的源码流程,通过本文可以帮助读者更好学习Android通话原理。

    android phone电话流程

    这是android phone电话流程文档,包括对ril-d的分析

    Android 4.2 电话被动接听流程(MT)分析

    Android 4.2 电话被动接听流程(MT)分析 相关文章请查看: http://blog.csdn.net/yihongyuelan/article/details/21953045

    Android 蓝牙模块分析

    蓝牙 JAVA 层分析包括框架分析、流程分析、常用类介绍等。蓝牙 JAVA 层是 Android 蓝牙模块分析的核心部分,负责蓝牙设备的管理和控制。 BLUEZ 简介 BLUEZ 是一个开源的蓝牙协议栈实现,提供了蓝牙设备的管理和...

    Android中打电话的数据流程分析

    1.所有流程的起点是从拨号后按下拨号键开始,此步的代码在/android sourcecode/packages/Contacts/src/com/android/contacts/目录的TwelveKeyDialer.java文件中,相关代码如下: 代码如下: dialButtonPressed() { ...

    android平台sensor从底层到上层流程介绍.doc

    JNI负责访问Sensor的客户端,而Application就是具体的应用程序,用来接收Sensor返回的数据,并处理实现对应的UI效果,如屏幕旋转,打电话时灭屏,自动调接背光(这三个功能的具体实现会在以后分析)

    android phone流程

    关于android电话流程的文档,包括RIL层代码分析等等。。。

    Android开发实验---通讯录.docx

    实验设备及软件: 一台电脑,Androidstudio2.3.3软件 实验方法(原理、流程图) 实现的通讯录功能和界面可在实验开发中由每位同学自己设计,但必须使用 SQLite 数据库保存通讯录信息。 以下功能和软件界面供参考:...

    Android恶意代码——木马APK分析.pdf

    AndroidKiller 是一款可视化的 Android 应用逆向工具,集 APK 反编译、IPK 打包、APK 签名、编码互转、ADB 通信等特色功能于一身。它包含了 ADB、APKTool、dex2jar、jd-gui 等反编译工具。其中 APKTool 能将 ...

    Android课程设计---基于Android系统的音乐播放器设计与实现.doc

    也使设计者更加熟练Android的技术 和其它在市场上的特点 设计报告撰写格式要求: 1设计题目与要求 2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册):内容包含如何登录、退出、...

    Java Android毕业设计 基于android手机通讯录的设计与实现毕业论文 共41页.pdf

    此通讯录的设计遵循标准的开发流程,首先进行需求分析,然后确定通讯录的功能,再编写程序的代码,调试程序,运行程序,并对程序进行优化完善。本软件利用Android提供的各种组件对界面进行设计,能够很好地支持用户...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part3

    18.4 电话系统实现流程分析507 18.4.1 初始启动流程507 18.4.2 request流程509 18.4.3 response流程512 第19章 其他系统514 19.1 alarm警报器系统514 19.1.1 alarm系统的结构514 19.1.2 需要移植的内容...

    大话企业级androoid开发精简版

    第04部分:android项目目录结构,执行流程及其他分析 第05部分:MVC设计模式讲解及电话拨号器和短信发送器应用 第06部分:日志输出,单元测试及调试 第07部分:UI(上) 第08部分:UI(中) 第09部分:UI(下) 第10部分:组件...

    基于android手机通讯录的设计与实现.doc

    此通讯录的设计遵循标准的开发流程,首先进行需求分析,然后确定通讯录的功能,再编写程序的代码,调试程序,运行程序,并对程序进行优化完善。本软件利用Android提供的各种组件对界面进行设计,能够很好地支持用户...

    Android底层开发技术实战详解-内核、移植和驱动(第2版,Kindle电子书)

    何为hal层深入分析,goldfish、msm、map内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,openmax多媒体、多媒体插件框架,传感器、照相机、wi-fi、蓝牙、gps和电话系统等。...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part1

    18.4 电话系统实现流程分析507 18.4.1 初始启动流程507 18.4.2 request流程509 18.4.3 response流程512 第19章 其他系统514 19.1 alarm警报器系统514 19.1.1 alarm系统的结构514 19.1.2 需要移植的内容...

    android开发实例大全_王东华

    本书以Android应用程序的开发为主题,并结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程。本书的讲述由浅入深,实例全面并典型,几乎囊括了所有和Android应用相关的项目。全书分为...

Global site tag (gtag.js) - Google Analytics