## Finding IMEI number of the Mobile

Required LIBRARY: etel3rdparty.lib

Required Capability: No

Header file: IMEIApp.h

#include <e32base.h>
#include <Etel3rdParty.h>

class CIMEIApp : public CActive
{
private:
void ConstructL();
CTelephony* iTelephony;
CTelephony::TPhoneIdV1 iPhoneIdV1;
CTelephony::TPhoneIdV1Pckg iPhoneIdV1Pckg;

public:
CIMEIApp(TDes& aIMEI);
~CIMEIApp();
static void GetIMEI(TDes& aIMEI);
TDes& IMEI;

private:
/*
These are the pure virtual methods from CActive that
MUST be implemented by all active objects
*/
void RunL();
void DoCancel();
};

Cpp file: IMEIApp.cpp

#include "IMEIApp.h"

void CIMEIApp::GetIMEI(TDes&amp; aIMEI)
{
CIMEIApp* self= new (ELeave) CIMEIApp(aIMEI);
CleanupStack::PushL(self);
self-&gt;ConstructL();
CleanupStack::PopAndDestroy(self);
}

void CIMEIApp::ConstructL()
{
iTelephony = CTelephony::NewL();
CActiveScheduler::Add(this);

iTelephony-&gt;GetPhoneId(iStatus, iPhoneIdV1Pckg);
SetActive();
CActiveScheduler::Start();
}

CIMEIApp:: CIMEIApp(TDes&amp; imei): CActive(EPriorityStandard),IMEI(imei),iPhoneIdV1Pckg(iPhoneIdV1)
{
//default constructor
}

CIMEIApp::~CIMEIApp()
{
delete iTelephony;
iTelephony = NULL;
}

void CIMEIApp::RunL()
{
if(iStatus==KErrNone)
{
IMEI= iPhoneIdV1.iSerialNumber;
CActiveScheduler::Stop();
}
}

void CIMEIApp::DoCancel()
{
iTelephony-&gt;CancelAsync(CTelephony::EGetPhoneIdCancel);
}

just use:

TBuf<25> iIMEI;
CIMEIApp::GetIMEI(iIMEI);