古詩詞大全網 - 個性簽名 - 如何獲取cell id

如何獲取cell id

當了找出S60第三版手機當前的cell ID,程序必須要有Symbian簽名。因為需要有ReadDeviceData能力。程序員必須使用active object因為這個調用要異步處理。下面是壹個獲取cell id的示例。

需要的頭文件:

#include<etel3rdparty.h>

所需鏈接庫:

LIBRARY etel3rdparty.lib

所需能力:

Capability ReadDeviceData

NetworkInfo.h

#ifndef __NETWORKINFO_H__

#define __NETWORKINFO_H__

#include <etel3rdparty.h> // CTelephony

// Observer interface

class MNetworkInfoObserver

{

public:

virtual void NetworkInfoRetrievedL(

const CTelephony::TNetworkInfoV1& aNetworkInfo) = 0;

virtual void HandleNetworkInfoError(TInt aError) = 0;

};

// Active object to get network info

class CNetworkInfo : public CActive

{

public:

static CNetworkInfo* NewL();

~CNetworkInfo();

void GetNetworkInfoL(MNetworkInfoObserver* aObserver);

protected:

// from CActive

void RunL();

TInt RunError(TInt aError);

void DoCancel();

private:

CNetworkInfo();

void ConstructL();

private:

CTelephony* iTelephony;

CTelephony::TNetworkInfoV1 iNwInfo;

CTelephony::TNetworkInfoV1Pckg iNwInfoPckg;

MNetworkInfoObserver* iObserver;

};

#endif // __NETWORKINFO_H__

NetworkInfo.cpp

#include "NetworkInfo.h"

CNetworkInfo::CNetworkInfo()

: CActive(EPriorityStandard),

iNwInfoPckg(iNwInfo)

{

CActiveScheduler::Add(this);

}

CNetworkInfo* CNetworkInfo::NewL()

{

CNetworkInfo* self = new (ELeave) CNetworkInfo;

CleanupStack::PushL(self);

self->ConstructL();

CleanupStack::Pop();

return self;

}

void CNetworkInfo::ConstructL()

{

iTelephony = CTelephony::NewL();

}

CNetworkInfo::~CNetworkInfo()

{

Cancel();

delete iTelephony;

}

// This function is used by our class' users to start getting network info.

void CNetworkInfo::GetNetworkInfoL(MNetworkInfoObserver* aObserver)

{

__ASSERT_ALWAYS(!IsActive(), User::Leave(KErrInUse));

iObserver = aObserver;

// Start async call to receive current network information

iTelephony->GetCurrentNetworkInfo(iStatus, iNwInfoPckg);

SetActive();

}

void CNetworkInfo::DoCancel()

{

iTelephony->CancelAsync(CTelephony::EGetCurrentNetworkInfoCancel);

}

void CNetworkInfo::RunL()

{

User::LeaveIfError(iStatus.Int());

// Request completed successfully.

// Now we can notify our observer.

if(iObserver)

{

iObserver->NetworkInfoRetrievedL(iNwInfoPckg());

}

}

TInt CNetworkInfo::RunError(TInt aError)

{

// There was an error retrieving current network info.

// Let's inform our observer about the error so that it can analyze it

// and try to recover.

if(iObserver)

{

iObserver->HandleNetworkInfoError(aError);

}

return KErrNone;

}