很多电信公司提供了'我在哪里'这种功能,实现起来其实比较简单,主要应用了GSM协议中的一些字段来标示当前的areaid,就像IMSI中的前几个字符来标示当前网络所属国家一样。
在S60中的实现:
#include <ETELBGSM.H>
RTelServer aTelServer;
_LIT(KTsyName, "phonetsy.tsy");
aTelServer.Connect();
// Load the profile of the phone
aTelServer.LoadPhoneModule( KTsyName );
// Get the phone name
RTelServer::TPhoneInfo phoneInfo;
User::LeaveIfError(aTelServer.GetPhoneInfo(0,phoneInfo));
// Open the phone by name
RBasicGsmPhone phone;
User::LeaveIfError(phone.Open(aTelServer,phoneInfo.iName));
MBasicGsmPhoneNetwork::TCurrentNetworkInfo aNetworkInfo;
phone.GetCurrentNetworkInfo( aNetworkInfo);
User::LeaveIfError(phone.GetCurrentNetworkInfo( aNetworkInfo));
我在哪里?在aNetworkInfo.iLocationAreaCode;
phone.Close();
aTelServer.UnloadPhoneModule( KTsyName );
aTelServer.Close();
如上,得到所谓的areaid以后,对应一个相当大的数据库,就可以查到areaid对应的地区了,例如:4xxx对应清华大学.