如何获取IMEI号

查看IMEI(用来唯一标示每个手机的串号) "*#06#"。但在模拟器上运行该程序时得到的 IMEI 是"0000000000000".

 

2版
plpvariant.lib

#include    

 

    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
 
 
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;
};

你可能感兴趣的:(Symbian)