Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 19:18, 1 January 2008.

Отслеживание уровня сигнала с помощью CTelephony

From Forum Nokia Wiki

Перевод с английского, оригинальная статья находится здесь.


Этот пример демонстрирует возможность отслеживания текущего уровня сигнала сети с помощью 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;
   };


Внутренние ссылки

 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX