在Windows Mobile上监听Radio Interface Layer Notification

RIL(Radio Interface Layer)工作在手机的底层,负责数据传输、AT指令的发送、接收及解析、提供网络支持,支持上层通讯应用程序的SMS、Voice Call等。可以说,RIL是手机通信系统的软件层面的最底层。

如果我们想监听手机上的通讯活动,比如说想记录用户什么时候给那个号码拨打了电话,什么时候开始呼叫,什么时候开始建立会话进行通话,什么时候挂的电话(谁挂的),以及更详细一点的信息,例如手机都通过了哪些基站……这些信息都可以拦截RIL层的消息来得到。

本程序就是一个例子。当然,只是个示范程序,实现了最基本的监听,想要得到进一步详细的信息,只需对监听来的消息进行进一步解析即可。

 

//--------------------------------------------------------------------------- // <copyright file="RILHelper.cs" company="Yaping Xin"> // Copyright (c) Yaping Xin. All rights reserved. // </copyright> // <Description>Helper class for Radio Interface Layer.</Description> //--------------------------------------------------------------------------- namespace MobileAutomation.Projects.VDFStressTesting { using System; using System.Runtime.InteropServices; using System.Threading; /// <summary> /// Helper class for Radio Interface Layer. /// </summary> public class RILHelper { /// <summary> /// Delegation definition of Log event handler /// </summary> /// <param name="message">Message to transfer</param> public delegate void LogHandler(string message); /// <summary>Event handler to record log</summary> public static event LogHandler Log; /// <summary>AutoResetEvent object</summary> private static AutoResetEvent waithandle = new AutoResetEvent(false); /// <summary>HRESULT to RIL object</summary> private static IntPtr hRil = IntPtr.Zero; /// <summary>HRESULT to result</summary> private static IntPtr hRes = IntPtr.Zero; /// <summary> /// RILRESULTCALLBACK delegation /// http://msdn.microsoft.com/en-us/library/aa920069.aspx /// </summary> /// <param name="dwCode">Specifies the result code.</param> /// <param name="hrCmdID">ID returned by the command that originated this response.</param> /// <param name="lpData">Data associated with the notification.</param> /// <param name="cbData">Size of the structure pointed to by lpData.</param> /// <param name="dwParam">Specifies the parameter passed to RIL_Initialize or RIL_InitializeEmergency.</param> public delegate void RILRESULTCALLBACK( uint dwCode, IntPtr hrCmdID, IntPtr lpData, uint cbData, uint dwParam); /// <summary> /// RILNOTIFYCALLBACK delegation /// http://msdn.microsoft.com/en-us/library/aa922465.aspx /// </summary> /// <param name="dwCode">Specifies the notification code. </param> /// <param name="lpData">Data associated with the notification.</param> /// <param name="cbData">Size of the structure pointed to by lpData.</param> /// <param name="dwParam">Specifies the parameter passed to RIL_Initialize or RIL_InitializeEmergency.</param> public delegate void RILNOTIFYCALLBACK( uint dwCode, IntPtr lpData, uint cbData, uint dwParam); /// <summary> /// RIL Initialize /// </summary> /// <returns>RIL HRESULT</returns> public static IntPtr Initialize() { return RIL_Initialize(1, new RILRESULTCALLBACK(RilResultCallback), new RILNOTIFYCALLBACK(RilNotifyCallback), 0xffffffff, 0, out hRil); } /// <summary> /// RIL Deinitialize /// </summary> /// <returns>RIL HRESULT</returns> public static IntPtr Deinitialize() { return RIL_Deinitialize(hRil); } /// <summary> /// Retrieves the system time from the network. /// </summary> /// <returns>Positive HRESULT values</returns> public static IntPtr GetSystemTime() { return RIL_GetSystemTime(hRil); } /// <summary> /// RIL Reslt Callback Proc /// </summary> /// <param name="dwCode">Specifies the result code.</param> /// <param name="hrCmdID">ID returned by the command that originated this response.</param> /// <param name="lpData">Data associated with the notification.</param> /// <param name="cbData">Size of the structure pointed to by lpData.</param> /// <param name="dwParam">Specifies the parameter passed to RIL_Initialize or RIL_InitializeEmergency.</param> public static void RilResultCallback( uint dwCode, IntPtr hrCmdID, IntPtr lpData, uint cbData, uint dwParam) { RIL_NCLASS dwClass = (RIL_NCLASS)dwCode & RIL_NCLASS.ALL; string message = string.Format("ResultCallback - dwCode: {0}, RIL_NCLASS: {1}", dwCode, dwClass); RILHelper.OnLog(message); waithandle.Set(); } /// <summary> /// RIL Notify Callback Proc /// </summary> /// <param name="dwCode">Specifies the notification code. </param> /// <param name="lpData">Data associated with the notification.</param> /// <param name="cbData">Size of the structure pointed to by lpData.</param> /// <param name="dwParam">Specifies the parameter passed to RIL_Initialize or RIL_InitializeEmergency.</param> public static void RilNotifyCallback( uint dwCode, IntPtr lpData, uint cbData, uint dwParam) { RIL_NCLASS dwClass = (RIL_NCLASS)dwCode & RIL_NCLASS.ALL; string message = string.Format("NotifyCallback - dwCode: {0}, RIL_NCLASS: {1}", dwCode, dwClass); RILHelper.OnLog(message); waithandle.Set(); } /// <summary> /// Record the message /// </summary> /// <param name="message">Message to transfer</param> protected static void OnLog(string message) { if (RILHelper.Log != null) { RILHelper.Log(message); } } [DllImport("ril.dll")] private static extern IntPtr RIL_Initialize( uint dwIndex, RILRESULTCALLBACK pfnResult, RILNOTIFYCALLBACK pfnNotify, uint dwNotificationClasses, uint dwParam, out IntPtr lphRil); [DllImport("ril.dll")] private static extern IntPtr RIL_Deinitialize(IntPtr hRil); [DllImport("ril.dll")] private static extern IntPtr RIL_GetSystemTime(IntPtr hRil); } }

 

你可能感兴趣的:(windows,mobile,callback,interface,layer,structure)