查看IMEI(用来唯一标示每个手机的串号) "*#06#"。但在模拟器上运行该程序时得到的 IMEI 是"0000000000000".
2版
plpvariant.lib
#include <plpvariant.h>
TPlpVariantMachineId machineId;
PlpVariant::GetMachineIdL(machineId);
3版
所需要的库:
LIBRARY etel3rdParty.lib
能力要求:
CAPABILITY None
注意: 有些混淆的信息说明读取IMEI需要"ReadDeviceData"能力.其实这个能力不是用来读取IMEI号的, 而是用来读取 IMSI时用到的.
1.1 IMEI_Getter.cpp
#include "IMEI_Getter.h"
CImeiReader* CImeiReader::NewL(MImeiObserver* aObserver)
{
CImeiReader* self = NewLC(aObserver);
CleanupStack::Pop(self);
return self;
}
CImeiReader* CImeiReader::NewLC(MImeiObserver* aObserver)
{
CImeiReader* self = new (ELeave) CImeiReader(aObserver);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CImeiReader::CImeiReader(MImeiObserver* aObserver)
:CActive(EPriorityStandard), iObserver(aObserver), iIdV1Pkg(iIdV1)
{
}
CImeiReader::~CImeiReader()
{
Cancel();
delete iTelephony;
}
void CImeiReader::ConstructL(void)
{
CActiveScheduler::Add(this);
iTelephony = CTelephony::NewL();
iTelephony->GetPhoneId(iStatus,iIdV1Pkg);
SetActive();
}
void CImeiReader::DoCancel()
{
iTelephony->CancelAsync(CTelephony::EGetPhoneIdCancel);
}
void CImeiReader::RunL()
{
iObserver->GotIMEIL(iIdV1.iSerialNumber,iStatus.Int());
}
1.2 IMEI_Getter.h
#include <Etel3rdParty.h>
class MImeiObserver
{
public:
virtual void GotIMEIL(const TDesC& aIMEI,TInt aError) = 0;
};
class CImeiReader : public CActive
{
public:
static CImeiReader* NewL(MImeiObserver* aObserver);
static CImeiReader* NewLC(MImeiObserver* aObserver);
~CImeiReader();
protected:
void DoCancel();
void RunL();
private:
CImeiReader(MImeiObserver* aObserver);
void ConstructL(void);
private:
MImeiObserver* iObserver;
CTelephony* iTelephony;
CTelephony::TPhoneIdV1 iIdV1;
CTelephony::TPhoneIdV1Pckg iIdV1Pkg;
};