Call Swap Tutorial

This tutorial describes how to swap calls with the telephony API for applications.


  1. create a new instance of [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CTelephony']]]CTelephony
  2. use [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CTelephony']]]CTelephony::GetCallDynamicCaps() to check if the device supports swap function
  3. call [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CTelephony']]]CTelephony::Swap() when you have an active call and a call on hold The function makes the held call active and the puts the active call on hold. Pass the function the IDs of the two calls. The IDs are [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CTelephony']]]CTelephony::TCallId objects returned when you dialled or answered the calls.
  4. pass the enumeration [[[ERROR: [NOKX000E] Unable to find definition for key reference 'CTelephony']]]CTelephony::ESwapCancel to cancel the asynchronous request

Call swap example

#include <e32base.h>
#include <Etel3rdParty.h>

class CClientApp : public CActive

    CTelephony* iTelephony;
    CTelephony::TCallId iCallIdA;
    CTelephony::TCallId iCallIdB;

    CClientApp(CTelephony* aTelephony, CTelephony::TCallId aCallIdA, CTelephony::TCallId aCallIdB);
    TInt SomeFunction();

       These are the pure virtual methods from CActive that  
       MUST be implemented by all active objects
    void RunL();
    void DoCancel();

CClientApp::CClientApp(CTelephony* aTelephony, CTelephony::TCallId aCallId)
    : CActive(EPriorityStandard),
    //default constructor

TInt CClientApp::SomeFunction()
    // Check that the phone supports Resuming calls.
    CTelephony::TCallCapsV1 callCapsV1;
    CTelephony::TCallCapsV1Pckg callCapsV1Pckg(callCapsV1);
    iTelephony->GetCallDynamicCaps(iCallId, callCapsV1Pckg);

    if( callCapsV1.iControlCaps & CTelephony::KCapsSwap )
       // The call represented by 'iCallId' can be swapped
       iTelephony->Swap(iStatus, iCallIdA, iCallIdB);
       return KErrNone;
       // The call cannot be swapped; 
       // return an error indicate this.
       return KErrNotSupported;

void CClientApp::RunL()
       {} // The call has been swapped successfully;

void CClientApp::DoCancel()