Code:
// MyTelephony.h // #ifndef MYTELEPHONY_H #define MYTELEPHONY_H #include <e32base.h> #include <Etel3rdParty.h> class CMyTelephony : public CActive { public: static void GetIMSIL(TDes& aIMSI); protected: void DoCancel(); void RunL(); private: static CMyTelephony* NewLC(); static CMyTelephony* NewL(); ~CMyTelephony(); CMyTelephony(); void ConstructL(); void GetSubscriberId(); private: CTelephony* iTelephony; CTelephony::TCancellationRequest iRequest; CTelephony::TSubscriberIdV1 iSubscriberId; CTelephony::TSubscriberIdV1Pckg iSubscriberIdPckg; }; #endif // MYTELEPHONY_H
Code:
// MyTelephony.cpp // #include <e32svr.h> #include "MyTelephony.h" CMyTelephony* CMyTelephony::NewLC() { CMyTelephony* self = new (ELeave) CMyTelephony; CleanupStack::PushL(self); self->ConstructL(); return self; } CMyTelephony* CMyTelephony::NewL() { CMyTelephony* self = CMyTelephony::NewLC(); CleanupStack::Pop(self); return self; } void CMyTelephony::GetIMSIL(TDes& aIMSI) { #ifdef _DEBUG _LIT(KDebugIMSI, "000000000000000"); aIMSI = KDebugIMSI; #else CMyTelephony* telephony = CMyTelephony::NewL(); telephony->GetSubscriberId(); aIMSI = telephony->iSubscriberId.iSubscriberId; delete telephony; #endif } void CMyTelephony::DoCancel() { iTelephony->CancelAsync(iRequest); } void CMyTelephony::RunL() { CActiveScheduler::Stop(); } CMyTelephony::~CMyTelephony() { delete iTelephony; } CMyTelephony::CMyTelephony() : CActive(CActive::EPriorityStandard), iSubscriberIdPckg(iSubscriberId) { CActiveScheduler::Add(this); } void CMyTelephony::ConstructL() { iTelephony = CTelephony::NewL(); } void CMyTelephony::GetSubscriberId() { Cancel(); iRequest = CTelephony::EGetSubscriberIdCancel; iTelephony->GetSubscriberId(iStatus, iSubscriberIdPckg); SetActive(); CActiveScheduler::Start(); }
Code:
#include "MyTelephony.h" ... TBuf<CTelephony::KIMSISize> imsi; CMyTelephony::GetIMSIL(imsi); // synchronous CEikonEnv::Static()->InfoWinL(imsi, KNullDesC()); ...