为Windows Mobile设备创建位置感知的应用程序
2011-01-06 10:59:01 来源:WEB开发网[StructLayout(LayoutKind.Explicit)]
internal class RILCELLTOWERINFO
{
[FieldOffset(0)]
uint dwSize;
[FieldOffset(4)]
uint dwParams;
[FieldOffset(8)]
public uint dwMobileCountryCode;
[FieldOffset(12)]
public uint dwMobileNetworkCode;
[FieldOffset(16)]
public uint dwLocationAreaCode;
[FieldOffset(20)]
public uint dwCellID;
}
在这段代码中,你将看到如何取得最重要的结构体成员以传递给一个可以返回蜂窝基站位置的Web服务。在RILCELLTOWERINFO结构体中还有一些更有趣的字段,譬如,你所连接的基站的信号强度。通过这个结构体的其他成员,你可以自己计算出一个更为精确的当前位置。然而为了简单起见,我们只关注你所连接的蜂窝基站和它的位置。现在在托管代码中,你可以取得你所连接的基站的信息并存储到一个类中了。
如下的代码示范了托管类如何存储蜂窝基站信息。
public class CellTower
{
public int CellId { get; set; }
public int LAC { get; set; }
public int MCC { get; set; }
public int MNC { get; set; }
}
你可以使用下面的示例代码来调用必须的RIL APIs。有趣的部分是蜂窝基站信息被返回给RIL_GetCellTowerInfo调用者的方式。信息不是至极返回的,而是通过一个回调函数返回的。因为位置感知的应用程序在Windows Mobile获知自己的位置之前无法做任何有用的工作,所以RIL_GetCellTowerInfo的异步行为通过基站信息可用时设置的一个托管事件转变成了同步行为。
如下的代码示范了在托管代码中如何获取基站信息。
public class CellTowerInfo
{
private static AutoResetEvent dataReceived = new AutoResetEvent(false);
private static RIL.RILCELLTOWERINFO towerInfo;
public static CellTower GetCellTowerInfo()
更多精彩
赞助商链接