×
Namespaces

Variants
Actions

Como obter o estado atual de roaming e receber notificação sobre a mudança de rede

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Platform Security
Tipo de assinatura requerido: DevCert or Symbian Signed
Capabilities: ReadDeviceData

Artigo
Tradução:
Por thiagobrunoms
Última alteração feita por hamishwillee em 19 Dec 2011

O objetivo deste artigo é descobrir se o cartão SIM está em roaming ou na rede doméstica e receber notificação sobre cada mudança de rede. A aplicação deve ser "Symbian Signed", pois exige a utilização do ReadDeviceData. O programador deve usar um active object pois as chamadas são assíncronas. Abaixo está um exemplo de uma classe que recupera o status de registro por solicitação.

Cabeçalho necessário:

#include<etel3rdparty.h>

Biblioteca necessária:

LIBRARY  etel3rdparty.lib

NetRegister.h

#ifndef CNETREGISTER_H__
#define CNETREGISTER_H__
 
#include <Etel3rdParty.h>
 
//Enumeration para ter maior controle nas informações de status de registro inicial ou notificação de mudança de rede.
enum TNetStatus
{
EOperationNone,
ENetworkInitialRegInfo,
ENetworkChangeRegInfo
};
 
class CNetRegister : public CActive
{
 
public:
 
// construtor e destrutor estáticos
static CNetRegister* NewL();
~CNetRegister();
 
public:
 
void IssueRequest();
void GetNetworkRegistration();
 
protected: // de CActive
virtual void DoCancel();
virtual void RunL();
 
private: // construtores privados
 
CNetRegister();
void ConstructL();
 
private: // dados
CTelephony* iTelephony;
CTelephony::TNetworkRegistrationV1 iNetworkRegistrationV1;
CTelephony::TNetworkRegistrationV1Pckg iNetworkRegistrationV1Pckg;
TNetStatus iNetStatus;
};
 
#endif CNETREGISTER_H__

NetRegister.cpp

#include "NetRegister.h"
 
CNetRegister* CNetRegister::NewL()
{
CNetRegister* self = new (ELeave) CNetRegister();
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop(); // self
return self;
}
 
 
CNetRegister::CNetRegister(): CActive(EPriorityHigh),iNetworkRegistrationV1Pckg(iNetworkRegistrationV1)
{
 
}
 
 
void CNetRegister::ConstructL()
{
iTelephony = CTelephony::NewL();
CActiveScheduler::Add(this);
GetNetworkRegistration();
}
 
 
CNetRegister::~CNetRegister()
{
Cancel();
delete iTelephony;
}
 
 
void CNetRegister::RunL()
{
if( iStatus == KErrNone )
{
switch(iNetStatus)
{
//Network registration changed notification.
case ENetworkChangeRegInfo:
{
CTelephony::TRegistrationStatus regStatus = iNetworkRegistrationV1.iRegStatus;
if(regStatus==CTelephony::ERegisteredRoaming)
{
//Rede alterada para Roaming
}
else if(regStatus==CTelephony::ERegisteredOnHomeNetwork)
{
//Rede alterada para Home network
}
}
break;
//Status inicial de registro de rede. Realiza pela primeira vez o status da rede tal como salvar os dados da rede etc.....
case ENetworkInitialRegInfo:
{
CTelephony::TRegistrationStatus regStatus = iNetworkRegistrationV1.iRegStatus;
if(regStatus==CTelephony::ERegisteredRoaming)
{
//Inicialmente no modo Roaming
}
else if(regStatus==CTelephony::ERegisteredOnHomeNetwork)
{
//Inicialmente no modo Home network
}
}
break;
default:
break;
}
 
}
else
{
// Captura erros
}
IssueRequest();
}
 
 
void CNetRegister::DoCancel()
{
iTelephony->CancelAsync(CTelephony::ENetworkRegistrationStatusChangeCancel);
iTelephony->CancelAsync(CTelephony::EGetNetworkRegistrationStatusCancel);
}
 
 
void CNetRegister::IssueRequest()
{
iNetStatus = ENetworkChangeRegInfo;
iTelephony->NotifyChange( iStatus,
CTelephony::ENetworkRegistrationStatusChange,
iNetworkRegistrationV1Pckg);
SetActive();
}
 
void CNetRegister::GetNetworkRegistration()
{
iNetStatus = ENetworkInitialRegInfo;
iTelephony->GetNetworkRegistrationStatus(iStatus, iNetworkRegistrationV1Pckg);
SetActive();
}

Links relacionados

This page was last modified on 19 December 2011, at 02:00.
87 page views in the last 30 days.