顶层代码:PhoneApp.java, extends Application, 说明这是一个应用程序,此处会启动一个InCallScreen。
对于通话,也有可能其他情况引起通话,如从电话本中拨号,或从短信中拨号,这时主是通过OutgoingCallBroadcaster发起通话广播
OutgoingCallBroadcaster.java, extends Activity, 有一个内部类OutgoingCallReceiver, 其注释为:如果广播还未被取消,终止NEW_OUTGOING_CALL广播,启动InCallScreen, 并带有已经被修改的号码或其他提供的信息
InCallScreen.java, InCallScreen extends Activity implements View.OnClickListener, View.OnTouchListener, 是一个Activity,并实现了两个接口,一个是OnClickListener和
OnTouchListener。
这个类中实现电话状态下的屏幕显示。
根据实际手机状态,会显示拨号键盘DTMFTwelveKeyDialer。
调用placeCall方法进行打电话。此方法中,非紧急电话时,调用PhoneUtils.placeCallVia(通过路由,代理??),紧急电话,启动一个EmergencyCallHandler的Activity:startActivity(intent.setClassName(this, EmergencyCallHandler.class.getName()));
在onNewIntent,也会调用InCallInitStatus status = placeCall(intent);(不需要路由)
PhoneUtils.java 在packages/apps/Phone/src/com/android/phone/PhoneUtils.java,
实现电话一些混杂的功能,如挂电话,接电话,置电话,等功能。是一个与应用程序实现电话相关的功能。
组合了PhoneApp.java, 调用Phone.java里的接口函数。
其中placeCallVia方法里和placeCall(mPhone, number, contactUri)都调用了phone.dial(),其中phone的类型为一个接口
Phone.java,
由此接口,实现一个抽象类PhoneBase,即public abstract class PhoneBase extends Handler implements Phone
而GSMPhone继续于PhoneBase,此类组合了一个GsmCallTracker。这里主要考虑GSM制式。当然还有CDMAPhone.java
因此,由phone.dial方法,实际上就是调用了GsmCallTracker中的dial方法,如mCT.dial(newDialString);
GsmCallTracker.java
此类继承于CallTracker, CallTracker继承于Handler
GsmCallTracker中有一个变量cm,此变量定义于CallTracker.java中,即public CommandsInterface cm;
通过cm相关接口方法实现通话目的。
CommandsInterface.java
顾名思义,这是一个通用接口,它的一个实现就是RIL.java中的RIL类:public final class RIL extends BaseCommands implements CommandsInterface
RIL.java
这个类实现就是以socket的方式与C++/C中的串口数据进行交互。
主要是发送数据和接收数据。
发送数据一般有电话拨号,短信发送,和gprs网络数据。
接收数据一般是发送数据的一些响应,如at命令的返回,这类数据一般称为solicited信息,另外一些数据是模块自发上传的数据,如来电,信号量,网络状态Unsolicited信息。
Android 电话涉及到的几个类备注
最新推荐文章于 2024-04-21 23:46:36 发布