Symbian程序区分当前用户SIM卡是移动还是联通(转帖)
2010-11-29 19:05
204 查看
来源于:http://hi.baidu.com/%B9%ED%C8%CB%CD%F5/blog/item/28a41cb35a0991a1d8335a4d.html
首先介绍下背景知识:
SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber
Identification
Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。IMSI由MCC、MNC、MSIN组成,其中MCC为移动国家
号码,由3位数字组成,唯一地识别移动客户所属的国家,我国为460;MNC为网络id,由2位数字组成,用于识别移动客户所归属的移动网络,中国移动为
00,中国联通为01;MSIN为移动客户识别码,采用等长11位数字构成。唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通,只需
取得SIM卡中的MNC字段即可,在S60 2nd和3rd上都提供这样的api。
Code: // TelephonyAO.h
#include **
#include **
Class CTelephonyAO : public CActive
{
public:
static CTelephonyAO* NewL();
void GetNetWorkId(TDes& aNetworkId);
public:
~CTelephonyAO();
protected:
void DoCancel();
void RunL(); private:
CTelephonyAO();
void ConstructL();
void GetNetWorkInfo();
private:
CTelephony* pTelephony_;
CTelephony::TCancellationRequest cancelRequest_;
CTelephony::TNetworkInfoV1 networkInfo_;
CTelephony::TNetworkInfoV1Pckg networkInfoPkg_;
};
/* .cpp */ // TelephonyAO.cpp
#include "TelephonyAO.h"
CTelephonyAO::CTelephonyAO() : CActive(EPriorityStandard), networkInfoPkg_(networkInfo_)
{
CActiveScheduler::Add(this);
}
CTelephonyAO::~CTelephonyAO()
{
delete pTelephony_;
}
void CTelephonyAO::ConstructL()
{
pTelephony_ = CTelephony::NewL();
}
CTelephonyAO* CTelephonyAO::NewL()
{
CTelephonyAO* pSelf = new(ELeave) CTelephonyAO;
CleanupStack::PushL(pSelf);
pSelf->ConstructL();
CleanupStack::Pop();
return pSelf;
}
void CTelephonyAO::RunL()
{
CActiveScheduler::Stop();
}
void CTelephonyAO::DoCancel()
{
pTelephony_->CancelAsync(cancelRequest_);
}
void CTelephonyAO::GetNetWorkInfo()
{
Cancel();
cancelRequest_ = CTelephony::EGetCurrentNetworkInfoCancel;
pTelephony_->GetCurrentNetworkInfo(iStatus, networkInfoPkg_);
SetActive();
CActiveScheduler::Start();
}
void CTelephonyAO::GetNetWorkId(TDes& aNetworkId)
{
GetNetWorkInfo();
aNetworkId = networkInfo_.iNetworkId;
}
用法:
TBuf<4> networkId;
CTelephonyAO* pTelephony = CTelephonyAO::NewL();
CleanupStack::PushL(pTelephony);
pTelephony->GetNetWorkId(networkId);
CleanupStack::PopAndDestroy(pTelephony); // 下面通过判断networkId是01还是00即可区分移动和联通
(注: 移动或者联通新号码断非00和01,可以根据具体的SIM卡测试归类一下)
首先介绍下背景知识:
SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber
Identification
Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。IMSI由MCC、MNC、MSIN组成,其中MCC为移动国家
号码,由3位数字组成,唯一地识别移动客户所属的国家,我国为460;MNC为网络id,由2位数字组成,用于识别移动客户所归属的移动网络,中国移动为
00,中国联通为01;MSIN为移动客户识别码,采用等长11位数字构成。唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通,只需
取得SIM卡中的MNC字段即可,在S60 2nd和3rd上都提供这样的api。
Code: // TelephonyAO.h
#include **
#include **
Class CTelephonyAO : public CActive
{
public:
static CTelephonyAO* NewL();
void GetNetWorkId(TDes& aNetworkId);
public:
~CTelephonyAO();
protected:
void DoCancel();
void RunL(); private:
CTelephonyAO();
void ConstructL();
void GetNetWorkInfo();
private:
CTelephony* pTelephony_;
CTelephony::TCancellationRequest cancelRequest_;
CTelephony::TNetworkInfoV1 networkInfo_;
CTelephony::TNetworkInfoV1Pckg networkInfoPkg_;
};
/* .cpp */ // TelephonyAO.cpp
#include "TelephonyAO.h"
CTelephonyAO::CTelephonyAO() : CActive(EPriorityStandard), networkInfoPkg_(networkInfo_)
{
CActiveScheduler::Add(this);
}
CTelephonyAO::~CTelephonyAO()
{
delete pTelephony_;
}
void CTelephonyAO::ConstructL()
{
pTelephony_ = CTelephony::NewL();
}
CTelephonyAO* CTelephonyAO::NewL()
{
CTelephonyAO* pSelf = new(ELeave) CTelephonyAO;
CleanupStack::PushL(pSelf);
pSelf->ConstructL();
CleanupStack::Pop();
return pSelf;
}
void CTelephonyAO::RunL()
{
CActiveScheduler::Stop();
}
void CTelephonyAO::DoCancel()
{
pTelephony_->CancelAsync(cancelRequest_);
}
void CTelephonyAO::GetNetWorkInfo()
{
Cancel();
cancelRequest_ = CTelephony::EGetCurrentNetworkInfoCancel;
pTelephony_->GetCurrentNetworkInfo(iStatus, networkInfoPkg_);
SetActive();
CActiveScheduler::Start();
}
void CTelephonyAO::GetNetWorkId(TDes& aNetworkId)
{
GetNetWorkInfo();
aNetworkId = networkInfo_.iNetworkId;
}
用法:
TBuf<4> networkId;
CTelephonyAO* pTelephony = CTelephonyAO::NewL();
CleanupStack::PushL(pTelephony);
pTelephony->GetNetWorkId(networkId);
CleanupStack::PopAndDestroy(pTelephony); // 下面通过判断networkId是01还是00即可区分移动和联通
(注: 移动或者联通新号码断非00和01,可以根据具体的SIM卡测试归类一下)
相关文章推荐
- symbian区分当前用户SIM卡是移动还是联通
- symbian区分当前用户SIM卡是移动还是联通
- symbian区分当前用户SIM卡是移动还是联通
- 【转】区分当前用户SIM卡是移动还是联通
- (转)区分当前用户SIM卡是联通还是移动
- 区分当前用户SIM卡是移动还是联通
- 区分当前用户SIM卡是移动还是联通
- android代码判断当前手机的手机号码是属于移动、联通、还是电信的
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- (PHP)程序中如何判断当前用户终端是手机等移动终端
- android代码判断当前手机的手机号码是属于移动、联通、还是电信的
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- 切换环境,MTM能力,区分移动还是联通
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- 用户从手机的浏览器访问www.baidu.com,看到的可能跟桌面PC电脑,是不太一样的网页效果,会更适合移动设备使用。请简要分析一下,实现这种网页区分显示的原因及技术原理。
- 检测当前程序权限和用户类型的说明
- 获取当前使用某个TCODE的用户的程序样例
- Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?