This state diagram shows how to dial or answer one or two calls at a time. It presume that no other code is making any calls; only you are making calls.
The boxes are states. The 'E...' value in each box is the status of the phone's voice line. Voice line status describes these states and their meaning. You can also find the status of individual calls; see Status of voice calls you own
The arrows show events that trigger a change of state. In these
events, a word in bold indicates a CTelephony
method that you can call.
To dial or answer a call:
Check for other calls by getting the Voice line status.
If the line is Idle
(CTelephony::EStatusIdle
) then no calls are in
progress
If the line is on hold
(CTelephony::EStatusHold
) then there is another call in
progress, but it is on hold and you can still dial or answer a second call. Now
go to point four below
Otherwise, another call is active: you must wait until it finishes before you can dial or receive a call. To detect when this occurs, see the example in How to Get Notification when Information Changes
Dialling a call
While no calls are in progress, the line's status is
CTelephony::EStatusIdle
. To dial a call, use
CTelephony::DialNewCall()
; see
Dial a call. If dialling was
successful and the remotes party answers the call then the line's status will
become CTelephony::EStatusConnected
.
Answering a call
While no calls are in progress, the line's status is
CTelephony::EStatusIdle
. When a remote party calls your
phone, the voice line's status will change to
CTelephony::EStatusRinging
.
Detect an incoming call
describes how to detect this change.
When the status is CTelephony::EStatusRinging
, use
CTelephony::AnswerIncomingCall()
to answer the call. The
status will change to CTelephony::EStatusConnected
and the
phone user can talk to the remote party.
What next?
When you successfully dial or answer a call, you will be given a
CTelephony::TCallId
the identifies the call. You must keep
this safe. To control your call (hang-up, hold, resume etc) you call
CTelephony
methods. Each method must be passed the ID of a call to
operate on.
Once a call is connected you have a number of options. You can perform these operations on your call. They are the same as those in Handling one call at a time:
Find out about the call and the call; see Detailed line and call information and Remote party information
In addition, you can dial or answer a second call:
At some point, a remote party might try to ring your phone. It is answered in the same way as the first.
The voice line state will change to
CTelephony::EStatusRinging
. You can receive notification
when this occurs; see Detect an incoming call. Before answering the second call, you must
put the original call on hold. This is shown in the diagram above.
You can also dial a second call in the same way as the first. Once again, you must put your original call on hold before dialling the second call.
A CTelephony::TCallId
will be given to you
when you successfully connect a second call. You will also have a
CTelephony::TCallId
from the first call. Now you will be the owner
of two calls: at any one time, one will always be active and one
will always be on hold.
Now you can:
Terminate either call. If you terminate the active call then you will be left with a call on hold. If you terminate the on-hold call then you will be left with an active call.
Detect remote party terminating either call. Once again, if the active call ends then you will be left with a call on hold and vice versa.
Find out about the call and the call; see Detailed line and call information and Remote party information