(1)学习摘要:今天自我学习了一下TelephonyManager和ITelephony.aidl的调用关系,即ITelephony.aidl是服务提供方,而TelephonyManager是客户端,封装相应的方法供上层APP使用。
(2)主要类的地址:
ITelephony.aidl: frameworks/base/telephony/java/com/android/internal/telephony
PhoneInterfaceManager.java: /packages/services/telephony/src/com/android/phone(继承ITelephony.stub)
ServiceManager: /frameworks/base/core/java/android/os
TelephonyManager: /frameworks/base/telephony/java/android/telephony
(3)详细说明:
| ITelephony.aidl | PhoneInterfaceManager.java | phone (TELEPHONY_SERVICE) |
(1)服务器端的接口为ITelephony.aidl,真正的实现类为PhoneInterfaceManager.java
(2)在PhoneInterfaceManager初始化的时候,把自己注册成SystemServer,即:ServiceManager.addService("phone", this),这样客户端(如TelephonyManager)通过ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));就可以获得服务器端的各种服务。
(3)在Phone进程启动时,Default Phone对象创建完之后,PhoneInterfaceManager对象在PhoneGlobals的onCreate()中被初始化,然后调用PhoneInterfaceManager构造方法,最后在publish方法中把自己注册成为systemserver.