读取sim的 imsi号问题,附代码
我想判断手机中是否有sim卡,所以希望通过读取sim卡的imsi号来判断,下面是我使用的代码,
#ifndef MYTELEPHONY_H
#define MYTELEPHONY_H
#include <e32base.h>
#include <Etel3rdParty.h>
class CMyTelephony : public CActive
{
public:
static void GetIMEIL(TDes& aIMEI);
protected:
void DoCancel();
void RunL();
private:
static CMyTelephony* NewLC();
static CMyTelephony* NewL();
~CMyTelephony();
CMyTelephony();
void ConstructL();
void GetPhoneId();
private:
CTelephony* iTelephony;
CTelephony::TCancellationRequest iRequest;
CTelephony::TPhoneIdV1 iPhoneIdV1;
CTelephony::TPhoneIdV1Pckg iPhoneIdV1Pckg;
};
#endif // MYTELEPHONY_H
// 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::GetIMEIL(TDes& aIMEI)
{
#ifdef _DEBUG
_LIT(KDebugIMEI, "004601018693425");
aIMEI = KDebugIMEI;
#else
CMyTelephony* telephony = CMyTelephony::NewL();
telephony->GetPhoneId();
aIMEI = telephony->iPhoneIdV1.iSerialNumber;
delete telephony;
#endif
}
void CMyTelephony:oCancel()
{
iTelephony->CancelAsync(iRequest);
}
void CMyTelephony::RunL()
{
CActiveScheduler::Stop();
}
CMyTelephony::~CMyTelephony()
{
delete iTelephony;
}
CMyTelephony::CMyTelephony() : CActive(CActive::EPriorityStandard), iPhoneIdV1Pckg(iPhoneIdV1)
{
CActiveScheduler::Add(this);
}
void CMyTelephony::ConstructL()
{
iTelephony = CTelephony::NewL();
}
void CMyTelephony::GetPhoneId()
{
Cancel();
iRequest = CTelephony::EGetPhoneIdCancel;
iTelephony->GetPhoneId(iStatus, iPhoneIdV1Pckg);
SetActive();
CActiveScheduler::Start();
}
红色部分注释之后在,代码在模拟器上运行读出的imsi号是15个0,但该代码在手机(e50,n73)上运行都没有读出任何内容,无论有没有sim卡都是,为什么呢?
#ifndef MYTELEPHONY_H
#define MYTELEPHONY_H
#include <e32base.h>
#include <Etel3rdParty.h>
class CMyTelephony : public CActive
{
public:
static void GetIMEIL(TDes& aIMEI);
protected:
void DoCancel();
void RunL();
private:
static CMyTelephony* NewLC();
static CMyTelephony* NewL();
~CMyTelephony();
CMyTelephony();
void ConstructL();
void GetPhoneId();
private:
CTelephony* iTelephony;
CTelephony::TCancellationRequest iRequest;
CTelephony::TPhoneIdV1 iPhoneIdV1;
CTelephony::TPhoneIdV1Pckg iPhoneIdV1Pckg;
};
#endif // MYTELEPHONY_H
// 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::GetIMEIL(TDes& aIMEI)
{
#ifdef _DEBUG
_LIT(KDebugIMEI, "004601018693425");
aIMEI = KDebugIMEI;
#else
CMyTelephony* telephony = CMyTelephony::NewL();
telephony->GetPhoneId();
aIMEI = telephony->iPhoneIdV1.iSerialNumber;
delete telephony;
#endif
}
void CMyTelephony:oCancel()
{
iTelephony->CancelAsync(iRequest);
}
void CMyTelephony::RunL()
{
CActiveScheduler::Stop();
}
CMyTelephony::~CMyTelephony()
{
delete iTelephony;
}
CMyTelephony::CMyTelephony() : CActive(CActive::EPriorityStandard), iPhoneIdV1Pckg(iPhoneIdV1)
{
CActiveScheduler::Add(this);
}
void CMyTelephony::ConstructL()
{
iTelephony = CTelephony::NewL();
}
void CMyTelephony::GetPhoneId()
{
Cancel();
iRequest = CTelephony::EGetPhoneIdCancel;
iTelephony->GetPhoneId(iStatus, iPhoneIdV1Pckg);
SetActive();
CActiveScheduler::Start();
}
红色部分注释之后在,代码在模拟器上运行读出的imsi号是15个0,但该代码在手机(e50,n73)上运行都没有读出任何内容,无论有没有sim卡都是,为什么呢?
...全文
相关推荐
SIM卡的IMSI号简介
对SIM卡的IMSI号进行详细介绍,包括IMSI号的来源及解读规则。适合于那些想要了解IMSI号信息的同学
Android 读取IMSI 和IMEI号支持双卡双待
Android 读取IMSI 和IMEI号支持双卡双待,可以判断双卡双待通过那个卡上网,及读取双卡双待的电话卡的信息
获取手机IMEI号,sim卡的IMSI号C#源码
获取手机IMEI号,sim卡的IMSI号,手机型号等 C#源码
android读取主副卡imsi
读取android设备上主卡和副卡的imsi。经测试大部分机型都能正常获取到,如小米等国产机
华为查询IMSI号码方法.rar
华为查询IMSI号码方法,对SIM卡的IMSI号进行详细介绍,包括IMSI号的来源及解读规则。适合于那些想要了解IMSI号信息的同学


