4

我一直在研究 Android 电话功能的源代码,但我有点迷茫。我基本上已经收集到,除非您是 Google 或 OEM,否则无法处理 CDMA/GSM 设备。现在我只是想弄清楚 OEM 将处理电话的代码放在哪里,即它们继承/实现了哪些类/接口。

在浏览电话应用程序的InCallScreen活动时,我追溯了结束通话按钮的点击处理程序,PhoneUtils.hangup(CallManager)最终调用com.android.internal.telephony.Call.hangup(). 由于com.android.internal.telephony.Call它是一个抽象类并且com.android.internal.telephony.Call.hangup()是一个抽象方法,我想知道这是否是 OEM 将重写以提供电话服务的类之一。在黑暗中更多一点是询问是否有人知道此类的任何开源实现,以便我可以更深入地了解幕后发生的事情。

4

1 回答 1

7

你是对的。它确实是com.android.internal.telephony.CallOEM 实现的接口。更具体地说,它是com.android.internal.telephony.Phone需要实现的接口,它使用CallConnection和更多接口。

对于您的第二个问题,Google/ASOP(Android 开源项目)实际上确实为 GSM 和 CDMA 提供了所有这些类的实现。所以在接口的android源码中有一个GSMPhone和一个实现。CDMAPhonePhone

https://android.googlesource.com/platform/frameworks/base如果您不想克隆整个 Android 源代码,可以克隆 git 。(frameworks/base)/telephony/java/com/android/internal/telephony/gsm/orcdma/文件夹下查看。在这里,您将找到例如您所询问GSMCall.java的接口的实现。com.android.internal.telephony.Call

android 电话堆栈看起来大概是这样的:

+------------------------------------+
| Phone  |  Contacts |  (other apps) |
+------------------------------------+
|android internal telephony framework|
+------------------------------------+
|    Radio Interface Layer (RIL)     |
+------------------------------------+
|        GSM/CDMA modem              |
+------------------------------------+

Where the GSM/CDMA modem is usually supplied by some vendor, and the RIL layer needs to be customized for the specific GSM/CDMA modem used. So in practice vendors don't have to modify the existing implementation of the Call, Connection, Phone, etc. interfaces in com.android.internal.telephony package unless they want to provide support for something different than a GSM/CDMA Phone.

于 2012-05-25T11:41:37.283 回答