s60 2nd平台上获取IMSI的方法

 

北京理工大学  20981  陈罡

开发手机网络应用的过程中,很多时候都希望每个用户都有一个跟用户手机号绑定的唯一的ID号码。在symbian s60 os v7.x, 8.x, symbian sdk 2nd平台上,获取用户的手机号码几乎是不可能的。原因很简单,手机号码这东西是中国移动运营商所掌握的,而不是手机所账掌握的,在移动运营商的内部有一 台服务器,专门用于把手机sim卡的imsi映射成为用户的手机号码。我们很显然无法获得这些移动运营商服务器上的数据。那么,至少,我们可以获得sim 卡的id。

获 得这个id的方法还是比较繁琐的,这需要依赖于etelmm.h和etelmmcs.h以及etelmm.lib的支持才可以实现。而这些头文件,在 symbian 2nd sdk里面并没有公布出来,说是什么none public的api。这真是让人恼火,于是我求助于索爱的uiq2.1平台的sdk。终于,找到了这些头文件。

准备工作:

(1)需要将etelmm.lib的wins版本拷贝到Epoc32/Release/wins/udeb/;把armi版本

拷贝到Epoc32/Release/armi/urel。

(2)需要把etelmm.h和etelmmcs.h拷贝到Epoc32/Include目录下。

真正实现起来的代码非常简单:

在mmp文件中添加:

library  etel.lib

library  etelmm.lib // 这个lib是从uiq2.1的sdk上面拿到的

#include <etel.h>

#include <etelmm.h> // 这个头文件以及相关的文件我会做为附件传上来

最好把取得imsi的代码封装到CActive这样的活动对象里面去,当然,直接读取也是

可以的:

RTelServer iServer;
RMobilePhone iPhone;

// 注意,当你找到etelmm.h的时候,一定要打开看看有没有这个

// TMobilePhoneSubscriberId的定义,很多etelmm.h是没有的

// 我用的这个是手工改过的

RMobilePhone::TMobilePhoneSubscriberId iImsi;
TRequestStatus iImsiStatus;
RTelServer::TPhoneInfo info;
User::LeaveIfError(iServer.Connect());
User::LeaveIfError(iServer.GetPhoneInfo(0, info));
User::LeaveIfError(iPhone.Open(iServer, info.iName));
iPhone.GetSubscriberId(iImsiStatus, iImsi);
User::WaitForRequest(iImsiStatus);
PrintBuf(iImsi) ; 

从本质上来讲,这个TMobilePhoneSubscriberId就是一个TBuf<...>

所以可以直接拿来被const TDesC&这样的函数使用。

最后贴上头文件、库文件,以及我写的一个测试程序的sis安装包:

安装后,运行的时候,只要按下菜单中的test选项,就可以看到当前手机的imsi。

希望这些能够帮助对此还有困惑的朋友解决问题。

文件: etelmm.rar
大小: 55KB
下载: 下载

你可能感兴趣的:(网络应用,user,服务器,手机,Symbian,平台)