Connection.java
Connection.java 是一个 abstract class, 位于 frameworks/base/telephony/java/com/android/internal/telephony 目录下, 是 Android 代码中电话部分的一个基本类,描述的是一个通路。
一开始,程序枚举了断线的原因,如下:
public enum DisconnectCause {
NOT_DISCONNECTED, INCOMING_MISSED, NORMAL, LOCAL, BUSY, CONGESTION, MMI, INVALID_NUMBER, LOST_SIGNAL, LIMIT_EXCEEDED, INCOMING_REGECTED, POWER_OFF, OUT_OF_SERVICE, ICC_ERROR, CALL_BARRED, FDN_BLOCKED, CS_RESTRICTED, CS_RESTRICTED_NORMAL, CS_RESTRICTED_EMERGENCY, UNOBTAINABLE_NUMBER, CDMA_LOCKED_UNTIL_POWER_CYCLE, CDMA_DROP, CDMA_INTERCEPT, CDMA_REORDER, CDMA_SO_REJECT, CDMA_RETRY_ORDER, CDMA_ACCESS_FAILURE, CDMA_PREEMPTED, CDMA_NOT_EMERGENCY, CDMA_ACCESS_BLOCKED, ERROR_UNSPECIFIED }
其中枚举了通话断掉的原因,其中有很多原因目前还没有理解。
下面定义了一些抽象方法:
1. public abstract String getAddress(); //获取地址值,例如电话号码
2. public abstract String getCnapName(); //Gets CDMA CNAP name associated with the connection
3. public String getOrigDialString(); //取得原始的号码串
4. public abstract Call getCall(); //取得拥有该Connection的Call
5. public abstract long getCreateTime(); //计算通路建立的时间,ms
6. public abstract long getConnectTime(); //计算通话建立连接的时间,ms
7. public abstract long getDisconnectTime(); //计算断开连接的时间,ms
8. public abstract long getDurationMillis(); //计算通话持续的时间
9. public abstract long getHoldDurationMillis(); //计算通话保持的时间,ms
10. public abstract boolean isIncoming(); //是否是来电
11. public Call.State getState(); //取得Connection的状态,通常与Call的状态一致
12. public boolean isAlive(); / public boolean isRinging(); //都是判断目前电话状态的函数
13. public abstract void hangup() throws CallStateException; //挂断电话的方法
14. public abstract void separate() throws CallStateException; //分离某个Connection的方法
以下是一些处理加长号码(例如含有分机号的号码)的方法。