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(); //計算通話持續(xù)的時間
9. public abstract long getHoldDurationMillis(); //計算通話保持的時間容劳,ms
10. public abstract boolean isIncoming(); //是否是來電
11. public Call.State getState(); //取得Connection的狀態(tài)祟辟,通常與Call的狀態(tài)一致
12. public boolean isAlive(); / public boolean isRinging(); //都是判斷目前電話狀態(tài)的函數(shù)
13. public abstract void hangup() throws CallStateException; //掛斷電話的方法
14. public abstract void separate() throws CallStateException; //分離某個Connection的方法
以下是一些處理加長號碼(例如含有分機號的號碼)的方法。
Call.java 文件位于 frameworks/base/telephony/java/com/android/internal/telephony 目錄下蓖救,它是一個抽象類,描述了phone 中通話方面信息:剛開始用一個枚舉定義了電話的所有狀態(tài)印屁,為:? ? IDLE, ACTIVE, HOLDING, DIALING, ALERTING, INCOMING, WAITING, DISCONNECTED, DISCONNECTING;并且對這些狀態(tài)進行了歸類循捺,具體為:? ? isActive = !(IDLE || DISCONNECTED || DISCONNECTING);? ? isRinging = (INCOMING || WAITING);? ? isDialing = (DIALING || ALERTING);其中定義的方法有:
1. public abstract ListgetConnection();? ? //獲取Call中所有的Connection
2. public abstract Phone getPhone();? ? //取得包含Call的Phone
3. public abstract boolean isMultiparty();? ? //是否有多個通話方
4. public abstract void hangup() throws CallStateException;? ? //掛斷通話
5. public boolean hasConnection(Connection c);? ? //判斷Call是否包含某個特定的Connection
6. public boolean hasConnections();? ? //判斷Call中是否包含Connection
7. public State getState();? ? //返回Call的狀態(tài)
8. public boolean isIdle();? ? //返回true,如果Call中僅包含disconnected Connection
9. public Connection getEarlistConnection();? ? //返回最早建立的Connection
10. public long getEarlistCreateTime();? ? //返回最早的Connection的建立時間
11. public long getEarlistConnectionTime();? ? //返回最早的Connection的連接時間
12. public boolean isDialingOrAlerting();
13. public boolean isRinging();
14. public Connection getLastestConnection();? ? //返回最新建立的Connection
15. public void hangupIfAlive();? ? //Hangup call if it is alive