The internal Android class com.android.internal.telephony.Call contains an enum called State and defined as follows:
public enum State {
IDLE, ACTIVE, HOLDING, DIALING, ALERTING, INCOMING, WAITING, DISCONNECTED, DISCONNECTING;
public boolean isAlive() {
return !(this == IDLE || this == DISCONNECTED || this == DISCONNECTING);
}
public boolean isRinging() {
return this == INCOMING || this == WAITING;
}
public boolean isDialing() {
return this == DIALING || this == ALERTING;
}
}
What does the different states represent?
Okay, this is my own attempt at answering the question:
/** Call is idle. */
IDLE,
/** Call is active i.e. audio paths are connected. */
ACTIVE,
/** We have placed the call on hold. */
HOLDING,
/** Outgoing dialling call initiated. */
DIALING,
/** Outgoing call is alerting receiving party. */
ALERTING,
/** Incoming call ready for pickup. */
INCOMING,
/** Incoming call is waiting for pickup, while another call is in progress. */
WAITING,
/** Call is disconnected, by either party. */
DISCONNECTED,
/** Call is currently being disconnected. */
DISCONNECTING;
3GPP TS 27.007 version 13.5.0 Release 13
List current calls +CLCC
Command
+CLCC
Possible response(s)
[+CLCC: <ccid1>,<dir>,<stat>,<mode>,<mpty>[,<number>
,<type>[,<alpha>[,<priority>[,<CLI validity>]]]]
[<CR><LF>+CLCC: <ccid2>,<dir>,<stat>,<mode>,<mpty>[,
<number>,<type>[,<alpha>[,<priority>[,<CLI validity>
]]]]
[...]]]
+CME ERROR: <err>
<stat>: integer type (state of the call)
0 active
1 held
2 dialing (MO call)
3 alerting (MO call)
4 incoming (MT call)
5 waiting (MT call)
My interpretation:
0 active: call in progress (setup was successful)
1 held: call on hold
2 dialing (MO call): number dialed
3 alerting (MO call): number dialed and the called party is alerted
4 incoming (MT call): incoming call, ringtone played (AT RING notification)
5 waiting (MT call): call waiting notification while another call is active (if call waiting feature enabled)