Определение FlightMode
Метаданные
Пример кода
Статья
Режим Flight Mode во многом схож с режимом Offline Mode.
В Symbian до девятой версии для получения состояния этого режима необходимо установить File:Mobinfo-1.01-Signed.zip. После подключения заголовочного файла mobileinfo.h FlightMode может быть определен с помощью функции:
CMobileNetworkInfo::GetNetworkAvailability(TMobileNetAvailability &aInfo,
TRequestStatus &aReqStatus)
Значение первого аргумента проверяется на равенство CMobileNetworkInfo::EMobileFlightMode.
Асинхронное использование этой функции затруднений не вызывает. К сожалению, как следует из документации, функции Mobinfo API не могут быть использованы вместе с User::WaitForRequest(). Поэтому, для синхронного вызова вы можете использовать следующий класс:
Файл FlightMode.h
#ifndef FLIGHTMODE_H
#define FLIGHTMODE_H
#include <e32base.h>
#include <mobileinfo.h>
class CFlightMode : public CActive
{
public:
static TBool IsInFlightModeL();
private:
CFlightMode();
~CFlightMode();
void ConstructL();
void Start();
private:
void RunL();
void DoCancel();
private:
CMobileNetworkInfo* iNetInfo;
TMobileNetAvailability iNetAvailability;
CActiveSchedulerWait* iWaitScheduler;
};
#endif // FLIGHTMODE_H
Файл FlightMode.cpp
#include "FlightMode.h"
TBool CFlightMode::IsInFlightModeL()
{
CFlightMode* self = new (ELeave) CFlightMode;
CleanupStack::PushL(self);
self->ConstructL();
TBool res = (self->iNetAvailability == EMobileFlightMode);
CleanupStack::PopAndDestroy(self);
return res;
}
CFlightMode::CFlightMode() : CActive( EPriorityStandard )
{
CActiveScheduler::Add( this );
}
void CFlightMode::ConstructL()
{
iWaitScheduler = new (ELeave) CActiveSchedulerWait;
iNetInfo= CMobileNetworkInfo::NewL();
Start();
}
CFlightMode::~CFlightMode()
{
Cancel();
delete iNetInfo;
delete iWaitScheduler;
}
void CFlightMode::DoCancel()
{
iNetInfo->CancelGetNetworkAvailability();
if (iWaitScheduler->IsStarted())
{
iWaitScheduler->AsyncStop();
}
}
void CFlightMode::Start( )
{
iNetInfo->GetNetworkAvailability(iNetAvailability, iStatus);
SetActive();
iWaitScheduler->Start();
}
void CFlightMode::RunL()
{
iWaitScheduler->AsyncStop();
}
Использование:
if (CFlightMode::IsInFlightModeL())
{
// ...
}
В Symbian третьей редакции определение Flight Mode выполняется с помощью
CTelephony::GetFlightMode(TRequestStatus &aReqStatus, TDes8 &aMode).


(no comments yet)