读取sim的 imsi号问题,附代码

top_spitfire 2008-09-23 10:14:08
我想判断手机中是否有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卡都是,为什么呢?

...全文
345 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
anel 2008-09-23
  • 打赏
  • 举报
回复
puddings 2008-09-23
  • 打赏
  • 举报
回复
sim卡的卡号是TSubscriberIdV1::iSubscriberId 即IMSI

你读的是手机串号IMEI
正常情况下,丢失后要更换SIM卡,无论是那一方。所以可通过重新注册新的SIM信息来验证是否可用。具体的方案细节就不详细说明了。其中技术方面关键的一环是如何识别唯一SIM卡。 刚开始是读取SIM卡的本机码,从http://www.microsoft.com/china/msdn/archives/library/dnnetcomp/html/netcfPhoneAPI.asp这篇<<从Microsoft .NET Framework 精简版访问电话API>>文章提供的示例中封装的Sim类中就有提供一个Sim.GetPhoneNumber()方法方便获取本机码。 但是考虑到这个码是可修改的且可以有很多个(通过PDA中提供的SIM管理器就可以修改)。所以得找其它的SIM卡信息,在这里用的是SIM卡中IMEI,IMSI(国际移动设备识别码(IMEI:International Mobile Equipment Identification Number)是区别移动设备的标志,储存在移动设备中,可用于监控被窃或无效的移动设备。IMEI组成如下图所示,移动终端设备通过键入“*#06#”即可查得。其总长为15位,每位数字仅使用0~9的数字。其中TAC代表型装配码,由欧洲型标准中心分配;FAC代表装配厂家码;SNR为产品序,用于区别同一个TAC和FAC中的每台移动设备;SP是备用编码。 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。IMSI组成如下图所示,其总长度不超过15位,同样使用0~9的数字。 其中MCC是移动用户所属国家代,占3位数字,中国的MCC规定为460;MNC是移动网码,最多由两位数字组成,用于识别移动用户所归属的移动通信网;MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户。) 读取这两个码用到TAPI的lineGetGeneralInfo()函数。而OpenNetCF提供了对TAPI的封装,正好可以拿来用。

3,120

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧