简要介绍ITelephony与TelephonyManager/TelephonyManagerEx,并说明他们的使用场景。
[SOLUTION]
ITelephony接口的代码实现是PhoneInterfaceManager.java,即PhoneInterfaceManager.java继承并实现了ITelephony.Stub。PhoneInterfaceManager.java在PhoneApp onCreate()时启动,并作为名称为“phone”的Service注册到ServiceManager中。调用其中的接口(我们以查看sim为例),可以使用如下代码:
用途:在使用平台开发时,其他应用可以通过ITelephony获取到一些Telephony相关信息。
TelephonyManager
TelephonyManager.java文件,主要是利用ITelephony、IPhoneSubInfo与ITelephonyRegistry来实现其功能,例如同样我们以hasIccCard()为例,这个函数在TelephonyManager中的实现是:
可见,TelephonyManager.java可以通过ITelephony来实现跨进程调用。此外TelephonyManager中提供listen()接口实现PhoneStateListener相关监听功能。使用方式大致如下:
1、 使用SDK开发或者平台开发时,调用相关接口获取Telephony相关信息;
2、 使用SDK开发或者平台开发时,调用listen(PhoneStateListener listener, int events),实现Telephony消息监听。
TelephonyManagerEx
TelephonyManagerEx.java文件,由MTK平台特有双卡接口的实现。与TelephonyManager类似,主要是利用ITelephony、IPhoneSubInfo与ITelephonyRegistry来实现其功能。使用方式也与TelephonyManager是类似的:
用途:
1、 使用SDK开发或者平台开发时,调用相关双卡接口获取Telephony相关信息;
2、 使用SDK开发或者平台开发时,调用listenGemini(PhoneStateListener listener, int events, int simId),实现Telephony监听双卡消息。
最终结论:
1、 ITelephony使用在平台开发上,跨进程调用到phone进程获取相关Telephony信息;
2、 当使用SDK开发时,仅能使用TelephonyManager或者TelephonyManagerEx接口,无法使用ITelephony;
3、 当使用SDK开发且需要使用双卡接口时,请尽量使用TelephonyManagerEx。
若是需要做相关接口的客制化,请参考FAQ09347 如何在ITelephony与TelephonyManager/TelephonyManagerEx中开出接口使用