OEM/Google在Android中实现com.android.internal.telephony.Call类

Eli*_*zer 4 android telephony android-source

我一直在研究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为提供电话服务而覆盖的类之一.在黑暗中更多的一个镜头是询问是否有人知道这个类的任何开源实现,所以我可以更深入地了解幕后发生的事情.

Bja*_*sen 7

你是对的.它确实com.android.internal.telephony.Call是OEM实现的接口.更具体地讲它是com.android.internal.telephony.Phone一个需要被实现使用该接口,Call,Connection,和许多多个接口.

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

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

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

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

GSM/CDMA调制解调器通常由某些供应商提供,而RIL层需要针对所使用的特定GSM/CDMA调制解调器进行定制.因此,在实践中的厂商不必修改现有实现的Call,Connection,Phone等接口的com.android.internal.telephony包,除非他们想提供的东西比一个GSM/CDMA手机不同的支持.

  • 感谢链接和一个非常好的解释. (2认同)