为Windows Mobile设备创建位置感知的应用程序
2011-01-06 10:59:01 来源:WEB开发网你可能对通过访问Windows Mobile的底层功能取回蜂窝基站信息还不是很熟悉。但是这不是什么大问题,因为无线接口层被实现为划分成两个独立层次的驱动程序和一个从应用程序内部访问信息的代理。MDD(模型设备驱动)层是独立于无线通讯堆栈的。它包含了与RIL代理通信的代码,和RIL驱动中所有无线通讯功能的实现。发布在 MDD层中的代码是使用安全、文档良好的,并且为你提供了对所有种类无线通讯功能的高层访问。另一方面,RIL的底层,PDD(平台依赖驱动)层是依赖于无线通信层的。每个OEM对它的实现都是不同的。
RIL公开了几个以“RIL_”为前缀的API.这些API都是用本地代码编写的,因此想要在托管程序中访问必须使用P/Invoke。你必须使用以下的API来获取蜂窝基站信息:
RIL_Initialize.初始化无线接口层以提供应用程序使用。
RIL_Deinitialize.在应用程序结束使用RIL时正确地关闭并清除资源。
RIL_GetCellTowerInfo.获取Widows Mobile设备所使用的蜂窝基站信息。
正如你在下面的代码示例中看到的一样,从托管代码中访问这些API是相当简单的。以下代码展示用以访问RIL的P/Invoke的声明。
public delegate void RILRESULTCALLBACK(uint dwCode,
IntPtr hrCmdID, IntPtr lpData, uint cbData, uint dwParam);
public delegate void RILNOTIFYCALLBACK(uint dwCode,
IntPtr lpData, uint cbData, uint dwParam);
[DllImport("ril.dll")]
public static extern IntPtr RIL_Initialize(uint dwIndex,
RILRESULTCALLBACK pfnResult,
RILNOTIFYCALLBACK pfnNotify,
uint dwNotificationClasses,
uint dwParam,
out IntPtr lphRil);
[DllImport("ril.dll", EntryPoint = "RIL_GetCellTowerInfo")]
public static extern IntPtr RIL_GetCellTowerInfo(IntPtr hRil);
[DllImport("ril.dll")]
public static extern IntPtr RIL_Deinitialize(IntPtr hRil);
使用RIL_Initialize,你既可以通过回调函数pfnResult返回结果,也可以通过回调函数pfnNotify来异步返回应用程序通过dwNotificationClasses注册的所有状态的状态改变。这个白皮书的示例代码只使用了同步操作。每次当应用程序调用RIL_GetCellTowerInfo时,这个API的执行结果就马上返回。然而,实际的数据却是通过传递给RIL_Initialize
更多精彩
赞助商链接