⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outcallwatcher.cpp

📁 symbian 2rd下可以获取并显示来电号码
💻 CPP
字号:
#include "OutCallWatcher.h"

COutCallWatcher::COutCallWatcher(MOutCallWatcherObserver & aObserver, RLine & aLine)
:CActive(EPriorityNormal),
 iObserver(aObserver),
 iLine(aLine),
 iState(ENoState)
    {
    }

COutCallWatcher::~COutCallWatcher()
    {
    Cancel();
    }

COutCallWatcher* COutCallWatcher::NewL(MOutCallWatcherObserver & aObserver, RLine & aLine)
    {
    COutCallWatcher* self = new (ELeave) COutCallWatcher(aObserver, aLine);
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);
    return self;
    }

void COutCallWatcher::ConstructL()
    {
    CActiveScheduler::Add(this);
    }

// Method for CActive
void COutCallWatcher::RunL()
    {
    if(iState == EDialling && iStatus.Int() == KErrGeneral)
        {
        Stop();
        iObserver.HandleOutCallHungUpL();
        return ;
        }

    if(iStatus.Int() != KErrNone)
        return ;

    switch(iState)
        {
        case EDialling:
            {
            iState = EWatching;
            StartL();
            break;
            }
        case EWatching:
            {
            User::LeaveIfError(iCall.GetStatus(iCallStatus));
            if(iCallStatus == RCall::EStatusHangingUp || iCallStatus == RCall::EStatusIdle)
                {
                Stop();
                iObserver.HandleOutCallHungUpL();
                }
            else
                {
                StartL();
                }
            break;
            }
            
        default:
            break;
        }
    }

void COutCallWatcher::DoCancel()
    {
    Stop();
    }

void COutCallWatcher::MakeCallL(const TDesC & aNumber)
    {
    iState = EDialling;
    iNumber.Set(aNumber);
    StartL();
    }

void COutCallWatcher::StartL()
    {
    switch(iState)
        {
        case ENoState:
            break;
        case EDialling:
            {
            User::LeaveIfError(iCall.OpenNewCall(iLine));
            iCall.Dial(iStatus, iNumber);
            break;
            }
        case EWatching:
            {
            iCall.NotifyStatusChange(iStatus, iCallStatus);
            break;
            }
            
        default:
            break;
        }

    SetActive();
    }

void COutCallWatcher::Stop()
    {
    switch(iState)
        {
        case ENoState:
            break;
        case EDialling:
            {
            iCall.HangUp();
            iCall.Close();
            break;
            }
        case EWatching:
            {
            iCall.NotifyStatusChangeCancel();
            iCall.Close();
            break;
            }

        default:
            break;
        }
    iState = ENoState;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -