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 通话模块来电与去电流程分析 #### 一、引言 在现代移动通信技术中,Android作为全球最广泛使用的移动操作系统之一,其通话功能的实现与优化至关重要。本文将深入剖析Android系统的通话模块,重点分析...
### Android电话系统数据流程分析 #### 一、电话系统基本功能与管理机制 在深入了解Android电话系统的内部工作原理之前,我们需要先明确一个电话系统的基本功能。根据提供的描述,电话系统的核心功能可以归纳为: ...
通过对Phone服务及其相关组件的详细介绍,我们可以清晰地了解到Android电话服务的工作机制和流程。其中,`GSMPhone`、`TelephonyManager`、`ITelephony`和`ITelephonyRegistry`等核心组件协同工作,共同构建了一个...
六、Android电话系统分析 1. 电话系统概述:电话系统的基本组成和交互机制。 2. rilD和RIL-Java:无线通信模块的设计和Java接口的分析。 3. GSMCallTacker:GSM呼叫追踪器的分析。 通过以上知识点,我们可以看到...
**Android核心分析(16):** 提供了对Android电话系统的概述,包括其设计目标和关键技术点。 **Android核心分析(17):** 分析了电话系统中的rilD(Radio Interface Layer Daemon)组件,它是连接硬件层与软件层的...
### Android待机流程详解 #### 一、概览 Android系统的待机流程是用户界面管理中的一个重要组成部分,它涉及到系统如何处理设备锁屏状态下的各种交互逻辑。在Android 2.2版本中,这一过程主要由`...
### Android电话拨打流程源码分析 #### 概述 本文主要针对Android 5.0版本中的开源项目(AOSP)进行电话拨打流程的源码分析。通过对拨打电话过程中的关键类和方法进行深入剖析,帮助读者更好地理解Android系统中...
Android开机流程分析主要涉及了设备启动过程中的网络初始化和SIM卡状态检查,这些步骤对于理解Android系统的底层工作原理至关重要。以下是对这一流程的详细解析: 首先,Android系统启动时会触发一系列服务和进程的...
7. 电话系统分析:研究Android电话系统,包括RIL(Radio Interface Layer)以及与电话功能相关的各种组件。RIL是连接Android框架和设备底层通信硬件的抽象层,负责将电话通信相关的控制和数据传输指令转化为具体的...
Android SipDemo是一个示例应用,它展示了如何在Android平台上实现网络电话功能,特别是针对Android 2.3(Gingerbread)及以上版本。这个项目基于Android的SIP(Session Initiation Protocol)API,这是一种用于...
在Android系统中,拨打电话的过程涉及一系列复杂的交互和数据流动。本文将深入解析从按下拨号键开始到电话真正拨通的整个流程。 首先,所有流程的起点始于用户在联系人应用或拨号器中输入电话号码并按下拨号键。在...
这篇毕业论文可能对以上知识进行深入探讨,分析Android手机通讯录的设计原理、实现方式、优化策略以及与系统其他部分的交互。通过研究,毕业生可能提出新的设计思路或改进方案,以提升用户体验或解决现有问题。
RIL.java位于frameworks/opt/telephony/src/com/android/internal/telephony目录下,是Android电话系统中负责与Radio硬件通信的一个重要组件。在电话的呼出流程的最后,RIL.java会启动一个RILReceiver的Runnable线程...
6. IPC框架分析:Android使用Binder作为主要的进程间通信机制,详细解析了Binder的工作流程、代理模式和跨进程通信的实现。 7. Service深入分析:Service是Android中的后台运行组件,讨论了Service的启动、生命周期...
源码分析是理解这一功能实现的关键,因为Android系统是开源的,我们可以深入到它的源代码中去探索接听电话的具体流程。下面,我们将详细探讨这一主题。 首先,Android系统中的电话服务主要由`...
Android初始化流程是操作系统启动后进行的一系列核心服务与系统组件的加载和设置过程,这个流程对系统的稳定性和功能完整性至关重要。下面将详细阐述Android初始化的关键步骤、涉及的服务以及相关组件的作用。 1. *...
下面是对这一过程的详细分析: 1. **TelephonyManager**:此类位于`frameworks/base/telphony/java/android/telephony`目录下,它为第三方应用提供了访问呼叫接口的能力。任何拥有相应权限的应用都能通过这些接口...
5. **应用程序**:用户可见的各种应用,如电话、短信、浏览器等,都是基于Android SDK开发的。 二、源码分析 源码分析涉及多个方面: 1. **启动流程**:从bootloader到Zygote进程的启动,再到系统服务的初始化,...
GSMCallTracker是Android电话系统中用于跟踪和管理GSM呼叫状态的组件,它负责处理呼叫过程中的各种事件。 #### Android应用程序框架之无边界设计意图 应用程序框架为开发者提供了构建应用所需的各种工具和服务,无...
蓝牙 JAVA 层分析包括框架分析、流程分析、常用类介绍等。蓝牙 JAVA 层是 Android 蓝牙模块分析的核心部分,负责蓝牙设备的管理和控制。 BLUEZ 简介 BLUEZ 是一个开源的蓝牙协议栈实现,提供了蓝牙设备的管理和...