Windows Mobile 获取基站信息(LAC,CellID)
2010-06-01 15:56:00 来源:WEB开发网前言:
在做手机定位应用软件,有两种方法可以实行定位:
1.利用基站定位,通过手机获取基站信息,再根据该信息获取经纬度;
2.利用GPS定位,直接获取经纬度信息。
利弊:
1.基站定位精确度低,误差范围估计500米以内(这种情况还是在大城市下的,如果是小城市,估计误差更大),但是基站定位可以实现处处定位,即不会因为建筑物等原因而无法获取基站信息。
2.GPS定位精确度高,误差范围估计10米以内,但是需要在空旷的地方,如果周围建筑物多,或者在室内,没法获取GPS信息。
通常用定位这两种方法都采用,也会增加第三种WIFI定位或者小区定位,这是后话。
在windows mobile下获得CELLID、LAC的途径有两条:利用串口发送AT指令或是利用RIL来获取。RIL(Radio Interface Layer)是微软自己开发的一个库,它的程序有固有的特点,在获取CELLID上,它其实是对第一种方法的封装,两者本质是一样的。但要注意是:串口一旦打开,就难以关闭,除非重启机器(可能涉及到底层的中断),另外并不是所有的设备都可以取到CELLID。
本文章是利用COM口来获取CELLID,并不保证所有的设备都支持。
测试平台:
VS2005 + WM 6.0
开发语言:
C++
正文:
定义基站信息结构体:
复制到剪贴板 C/C++代码
typedef struct
{
char CountryCode[12];
char AreaCode[4];
char NetworkCode[4];
char CellID[4];
} TCREG_DATA;
获取基站信息:
复制到剪贴板 C/C++代码
void Get_Cellid(void)
{
char m_sTemp[12] = {0};
strcat(m_sTemp,"COM");
for(int i = 9; i > 0; -- i)
{
char ch1;
_itoa(i,&ch1,10);
strcat(m_sTemp,&ch1);
strcat(m_sTemp,":");
TCREG_DATA* pData = (TCREG_DATA*)GetCREG(m_sTemp);
if(!pData)
continue;
char szNum1[8] = {0};
char szNum2[8] = {0};
strcpy(szNum1,pData->AreaCode);
strcpy(szNum2,pData->CellID);
更多精彩
赞助商链接