Android Telephony分析(一) ---- Phone详解
来源:互联网 发布:linux中查看文件内容 编辑:程序博客网 时间:2024/05/16 08:35
本文主要讲解Telephony中Phone相关的知识。
1. Android N中Phone的改变
Android 6.0时,Phone的继承关系:
在Android N中,Phone的继承关系:
变化1: GSMPhone和CDMAPhone合并成了GsmCdmaPhone,合并之后,某些方法当然需要对GSM Phone和CDMA Phone进行分别处理,举个例子:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
GSMPhone和CDMAPhone合并之后,PhoneProxy的作用就不大了,所以在Android N中PhoneProxy被删除了。
变化2:Phone.java取代了以前的PhoneBase.java(内部的方法有小部分修改),Phone.java变成了所有关系的中心枢纽。
变化3:接口变成了PhoneInternalInterface,因为PhoneProxy已不存在了,实现了PhoneInternalInterface接口的只剩下Phone.java,所以删掉了PhoneInternalInterface中大量的register/unregister的接口,这些register/unregister的方法留在Phone.java中即可,PhoneInternalInterface接口变得更加精简;
2. Phone从哪里来
(备注:上面时序图中的是谷歌原生的流程,跟高通的有点不一样。)
Android中有三种PhoneFactory:
PhoneFactory.java ——–>用于创建GsmCdmaPhone对象;
ImsPhoneFactory.java ——–>用于创建ImsPhone对象;
SipPhoneFactory.java ——–>用于创建SipPhone对象。
其中,GsmCdmaPhone对象是在Phone进程启动之后创建的(步骤1~6);之后,等到ImsService启动之后,就会创建ImsPhone(步骤7~11)。
2.1 Phone进程的启动
在Android中进程名一般对应的是该APP的包名,所以我们可以在源码中找package=”com.android.phone”。
接着你就会在/packages/services/Telephony/AndroidManifest.xml文件中看到:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
再往下翻翻,你就会看到application的名字是PhoneApp,application是最早被创建的,所以PhoneApp.java就是Phone进程启动的入口。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.2 Phone对象的初始化
在PhoneFactory.java的makeDefaultPhone方法中(时序图中的步骤3)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
2.3 为Phone实例注册监听事件
PhoneGlobals.java的onCreate()方法中
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
由CallManager来管理这些Phone实例并且为它们注册监听事件。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
3. Phone有什么作用
回忆第2小节创建GsmCdmaPhone对象时
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
先初始化了DefaultPhoneNotifier和RIL对象,将它们作为参数,再创建GsmCdmaPhone。
所以在GsmCdmaPhone中可以直接操纵这两个对象的方法。
DefaultPhoneNotifier实现了PhoneNotifier接口,PhoneNotifier接口中定义了很多notifyXXX的接口,所以DefaultPhoneNotifier主要的作用就是上报消息
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
而RIL对象主要作用是跟modem交互。
因此,Phone实例就间接地拥有了跟modem交互的能力和上报消息的能力,再加上Phone实例自身就有监听事件的能力,所以Phone的作用就是:
1.注册监听事件,及时上报消息(Call状态变化、Service状态变化、新来电等等)
2.间接地为其他类提供跟modem交互的服务。
原文地址: http://blog.csdn.net/linyongan/article/details/51994817
- Android Telephony分析(一) ---- Phone详解
- Android Telephony分析(一) ---- Phone详解
- Android Telephony分析(一) ---- Phone详解
- Android Telephony分析(一)--- Phone 详解
- Android Telephony分析(一) ---- Phone详解(Android 7.0)
- Android Telephony分析(二) ---- RegistrantList详解
- Android Telephony分析(三) ---- RILJ详解
- Android Telephony分析(四) ---- TelephonyManager详解
- Android Telephony分析(五) ---- TelephonyRegistry详解
- Android Telephony分析(二) ---- RegistrantList详解
- Android Telephony分析(三) ---- RILJ详解
- Android Telephony分析(四) ---- TelephonyManager详解
- Android Telephony分析(五) ---- TelephonyRegistry详解
- Android Telephony分析(四)--- TelephonyManager 详解
- Android Telephony分析(二)--- RegistrantList详解
- Android Telephony分析(三)--- RILJ 详解
- Android Telephony分析(五)--- TelephonyRegistry 详解
- Android Telephony分析(二) ---- RegistrantList详解
- Java抽象类
- AR多标签识别程序2
- 【matlab】利用sortrows进行Z字形扫描
- 基于RollPagerView实现图片轮播功能
- C/C++ Windows移植到Linux
- Android Telephony分析(一) ---- Phone详解
- 敏捷开发之Scrum扫盲篇
- Android中使EditText失去焦点,edittext禁止弹出键盘
- 网易实习——消除重复元素
- Struts2的介绍和入门(一)
- Java_修饰符
- Google 的软件工程经验总结
- Centos7 使用官方YUM源安装Mysql
- (22):优先考虑静态成员类