没有合适的资源?快使用搜索试试~ 我知道了~
首页Android 电话流程过程详细分析(Phone模块 )
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/3789245/bg1.jpg)
一、 Phone电话过程分析
Phone模块电话流程图如下:
Phone服务:是指 Phone所能提供的各种服务(来电去电,短信,SIM的锁定,数据连
结传输等)与 service不是同一个概念。
Phone 中的 service是 ITelephony和 ITelephonyRegistry的实现类,
PhoneInterfaceManager.java和 TelephonyRegistry.java,后续说明。
GSMPhone 管理了电话服务的内部功能,也对 RIL层进行了封装,上层应用不能直接跟
RIL本地代码打交道,而是间接通过 GSMPhone.但是应用层为了更方便的访问电话服务,需
要在 GSMPhone之上的 TelephonyManager。
TelephonyManager通过两个 IBinder接口 ITelephony和 ITelephonyRegistry来完成
这项工作。
ITelephony是电话服务用户(用户层或框架其他部分)主动进行 RIL访问的路径,它的服
务端实现类不在代码中,而是在 Phone应用
PhoneInterfaceManager.java(packages/apps/Phone/src/com/android/phone/)中。
PhoneInterfaceManager.publish中以”phone”为名注册该服务,提供拨号界面、呼叫、
![](https://csdnimg.cn/release/download_crawler_static/3789245/bg2.jpg)
挂机等呼叫相关控制,也提供 SIM PIN、开关 Radio等操作,他的实现是通过调用 Phone
接口来操作。
ItelephonyRegistry提供一个通知机制,将底层状态变更通知给电话服务的用户(用
户层或框架其他部分),是用户被动通知的路径,通知消息如网络状态、信号强弱更新、电
话状态更新等。它的服务端实现在框架代码中
TelephonyRegistry.java(frameworks/base/services/java/com/android/server/)。
底层通知的来源,是 GSMPhone通过 PhoneNotifier的实现者 DefaultPhoneNotifier将具
体的事件转化为函数调用并且通知到 TelephonyRegistry。TelephonyRegistry再通过两种
方式通知给用户,其一是广播事件,另外一种是通过服务用户在 TelephonyRegistry中注
册的 IphoneStateListener接口,实现回调。
SystemServer.java实现了电话服务的添加
………
ServiceManager.addService("telephony.registry",new TelephonyRegistry(context));
………
对于在 SystemServer.java中添加的 Service,SystemServer.java 中的 init1()函
数保证了 Service在后台不断运行,具体的底层实现,需要查看文档和源码。
1.1去电流程
不论打电话的方式是何种(拨号盘拨打,通话记录中拨号,联系人中拨号。。),都会触发
outgoingCallBroadcast的 onCreate()函数,获得 Action & Number,并对其进行判断,并
且广播给 outgoingCallReceiver内部类,发送 Intent.ACTION_NEW_OUTGOING_CALL消息。
outgoingCallReceiver收到 Intent消息,调用 onReceiver() -> doReceiver(),启动
InCallScreen界面。
进入 InCallScreen后,可以分为 15个函数调用。
具体的分析如下:
1.进入 InCallScreen类中,如果是第一次进入,调用 onCreate()函数(1),如果在通话过
程再一次的拨打电话,调用 onNewIntent()函数(2)。两个函数都会调用
IntentResolveIntent()函数(3),在这个函数中调用 InCallScreen类中的成员方法
placeCall()函数(4)。
InCallScreen中的 placeCall()函数调用类 PhoneUtils.placeCall()函数(5),
PhoneUtils.placeCall()函数调用 phone.dial()函数,至此 app层的函数调用结束,转到
frameworks层。
InCallScreen.java 和 PhoneUtils.Java在
packages\apps\phone\src\com\android\phone…
(6) PhoneUtils.java中
static int placeCall(Phone phone, String number, Uri contactRef)
(7) Connection cn = ◊phone.dial(number);
GSMPhone.java
在 phone应用程序中,通过 PhoneFactory来获取 GSMPhone实例。
GSMPhone()....
![](https://csdnimg.cn/release/download_crawler_static/3789245/bg3.jpg)
(8)dial(String dialString)
(9)mCT.dial(mmi.dialingNumber, mmi.getCLIRMode()); (PS: GsmCallTracker mCT)
GsmCallTracker.java
GsmCallTracker类 dial (String dialString)...
(10)dial (String dialString, int clirMode) {
...
(11)cm.dial(pendingMO.address, clirMode, obtainCompleteMessage());
(ps: CommandInterface cm = phone.mCM)
...
}
因为 RIL.java (frameworks\base\telephony\java\com\android\internal\telephony):
public final class RIL extends BaseCommands implements CommandsInterface所以
cm.dial
实际上调用的是 RIL.java 中的 dial (12)◊-
RIL.java
(12)dial (String address, int clirMode, Message result)
LRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);
(13)send()
(14) msg.sendToTarget();
target.sendMessage(this); (frameworks/base/core/java/android/os/Message.java)
//Handler.java (frameworks\base\core\java\android\os)
boolean sendMessage(Message msg){
return sendMessageDelayed(msg, 0);
}
--> return sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis);
---> sent = queue.enqueueMessage(msg, uptimeMillis);
(15) RIL.java
class RILSender extends Handler implements Runnable{
//把消息放入到消息队列
public void handleMessage(Message msg)
..
s.getOutputStream().write(dataLength);
s.getOutputStream().write(data);
剩余12页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/001f2cdf60ba4d3c88bfc361b9f992c0_jmq_0000.jpg!1)
jmq_0000
- 粉丝: 648
- 资源: 55
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 基于嵌入式ARMLinux的播放器的设计与实现 word格式.doc
- 经典:大学答辩通过_基于ARM微处理器的嵌入式指纹识别系统设计.pdf
- 嵌入式系统课程设计.doc
- 基于飞思卡尔控制器的智能寻迹车设计ARM基础课程课程设计.doc
- 下载基于ARM7的压电陶瓷换能器导纳圆测量仪的研制PDF格式可编辑.pdf
- 课程设计基于ARM的嵌入式家居监控系统的研究与设计.doc
- 论文基于嵌入式ARM的图像采集处理系统设计.doc
- 嵌入式基于ARM9的中断驱动程序设计—课程设计.doc
- 在Linux系统下基于ARM嵌入式的俄罗斯方块.doc
- STK-MirrorStore Product Release Notes(96130)-44
- STK-MirrorStore Storage Connectivity Guide for StorageTek Disk A
- 龙虾养殖远程监控系统的设计与实现数据采集上位-机软件模块-本科毕业设计.doc
- 龙虾养殖远程监控系统的设计与实现数据采集上位-机软件模块-.doc
- 龙虾养殖远程监控系统的设计与实现数据采集上位-机软件模块-本科生毕业论文.doc
- 麻阳风貌展示网站的设计与实现毕业论文.pdf
- 高速走丝气中电火花线切割精加工编程设计.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)