Отслеживание уровня сигнала с помощью CTelephony
Метаданные
Этот пример демонстрирует возможность отслеживания текущего уровня сигнала сети с помощью CTelephony API в устройстве на базе Symbian 3-й редакции.
Пример очень простой, для его использования достаточно реализовать функцию обратного вызова и создать экземпляр класса CNwSignalCheck.
При создании экземпляра CNwSignalCheck, начальный уровень сигнала сети будет получен с помощью асинхронного запроса GetSignalStrength(). После его завершения и вызова RunL(), все изменения будут отслеживаться с помощью NotifyChange().
SignalStrenght.cpp
CNwSignalCheck::~CNwSignalCheck()
{
Cancel();
delete iTelephony;
}
void CNwSignalCheck::ConstructL(void)
{
iTelephony = CTelephony::NewL();
GetSignalInfo();
}
CNwSignalCheck::CNwSignalCheck(MNwSignalObserver& aObserver)
: CActive(EPriorityStandard),iObserver(aObserver),iSigStrengthV1Pckg(iSigStrengthV1)
{
CActiveScheduler::Add(this);
}
void CNwSignalCheck::GetSignalInfo()
{
if(iTelephony && !IsActive())
{
iGettingSignal = ETrue;
iTelephony->GetSignalStrength(iStatus, iSigStrengthV1Pckg);
SetActive();
}
}
void CNwSignalCheck::RunL()
{
iObserver.SignalStatus(iSigStrengthV1.iSignalStrength,iSigStrengthV1.iBar);
if(iStatus != KErrCancel)
{
iTelephony->NotifyChange(iStatus,CTelephony::ESignalStrengthChange,iSigStrengthV1Pckg);
SetActive();
}
iGettingSignal = EFalse;
}
void CNwSignalCheck::DoCancel()
{
if(iGettingSignal)
iTelephony->CancelAsync(CTelephony::EGetSignalStrengthCancel);
else
iTelephony->CancelAsync(CTelephony::ESignalStrengthChangeCancel);
}
SignalStrenght.h
#include <Etel3rdParty.h>
class MNwSignalObserver
{
public:
virtual void SignalStatus(TInt32 aStrength,TInt8 aBars) = 0;
};
class CNwSignalCheck : public CActive
{
public:
CNwSignalCheck(MNwSignalObserver& aObserver);
void ConstructL(void);
~CNwSignalCheck();
private:
void GetSignalInfo();
void RunL();
void DoCancel();
private:
MNwSignalObserver& iObserver;
CTelephony* iTelephony;
CTelephony::TSignalStrengthV1 iSigStrengthV1;
CTelephony::TSignalStrengthV1Pckg iSigStrengthV1Pckg;
TBool iGettingSignal;
};


(no comments yet)