This tutorial describes how to place a call on hold with the telephony API for applications.
CTelephony
CTelephony::GetCallDynamicCaps()
to check if the device supports hold function CTelephony::Hold()
to place a call on hold Pass it the ID of the call to hold. The ID is the CTelephony::TCallId
returned when you dialled or answered the call. CTelephony::EHoldCancel
to cancel the asynchronous request #include <e32base.h> #include <Etel3rdParty.h> class CClientApp : public CActive { private: CTelephony* iTelephony; CTelephony::TCallId iCallId; public: CClientApp(CTelephony* aTelephony, CTelephony::TCallId aCallId); TInt SomeFunction(); private: /* 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), iTelephony(aTelephony), iCallId(aCallId) { //default constructor } TInt CClientApp::SomeFunction() { // Check that the phone supports holding calls. CTelephony::TCallCapsV1 callCapsV1; CTelephony::TCallCapsV1Pckg callCapsV1Pckg(callCapsV1); iTelephony->GetCallDynamicCaps(iCallId, callCapsV1Pckg); if( callCapsV1.iControlCaps & CTelephony::KCapsHold ) { // The call represented by 'iCallId' can be put on hold iTelephony->Hold(iStatus, iCallId); SetActive(); return KErrNone; } else { // The call cannot be put on hold; // return an error indicate this. return KErrNotSupported; } } void CClientApp::RunL() { if(iStatus==KErrNone) {} // The call has been held successfully; } void CClientApp::DoCancel() { iTelephony->CancelAsync(CTelephony::EHoldCancel); }