Windows Mobile 应用开发第二部分:设备模拟器和设备模拟器管理器
使用设备模拟器和蜂窝网络模拟器测试您的应用程序。
引言
如果您是 Windows Mobile 应用程序开发人员,您可能听说过或已经使用过设备模拟器。这是一个无价的工具,可以在各种不同的 Windows Mobile 设备上测试您的应用程序,而无需访问大量物理设备。
本文提供了使用设备模拟器测试应用程序的信息,以及如何配置设备模拟器以控制该工具的行为。本文还提供了有关如何将设备模拟器与蜂窝网络模拟器结合使用以测试电话呼叫和发送/接收文本消息的信息。最后,本文还包含一个关于如何以编程方式使用设备模拟器管理器来控制桌面应用程序中不同模拟器的部分。
设备模拟器的不同版本
设备模拟器 1.0 随 Visual Studio 2005 一起发布。此模拟器允许您在无需访问真实 Windows Mobile 设备的情况下运行和测试您的应用程序。由于设备模拟器是真正的 ARM 模拟器,它将运行与真实设备上相同的可执行文件。设备模拟器 2.0 构建于设备模拟器 1.0 之上,但扩展了其功能和性能,随 Windows Mobile 6 SDK 一起发布。作为 Windows Mobile 6 SDK 安装过程的一部分,设备模拟器 2.0 会自动替换设备模拟器 1.0。这意味着您使用 Visual Studio 2005 开发的所有 Windows Mobile 智能设备项目在安装设备模拟器 2.0 后将使用它。即使您不针对 Windows Mobile 6 设备,并且仍然使用 Visual Studio 2005 进行设备开发,至少安装一个 Windows Mobile 6 SDK 以利用设备模拟器 2.0 也是有意义的。设备模拟器 2.0 不仅运行代码速度更快,还提供了许多新功能,例如扩展的配置选项以模拟特定的硬件设置,以及测试无线通信连接的可能性。
设备模拟器 3.0 是设备模拟器的最新版本。它随 Visual Studio 2008 一起发布,并再次自动替换开发计算机上安装的任何先前版本的设备模拟器,作为 Visual Studio 2008 安装过程的一部分。设备模拟器 3.0 提供了与设备模拟器 2.0 相同的性能改进。通过使用设备模拟器管理器公开的 COM 接口,还可以以编程方式控制模拟器,例如,自动化启动和连接模拟器的过程,或以编程方式更改模拟器配置。
在 Visual Studio 2008 中使用设备模拟器
有多种方法可以在 Visual Studio 2008 中使用设备模拟器。要开始使用设备模拟器,您可以简单地选择一个已安装的、与您的应用程序构建所对应的 SDK 的模拟器映像作为 Visual Studio 2008 中的目标平台,然后开始调试您的应用程序。在选定的设备模拟器上运行应用程序之前,应用程序将被构建,如果尚未运行,则会启动设备模拟器,并将其连接到 Visual Studio 2008。应用程序部署后,可以选择性地连同正确版本的 .NET Compact Framework 以及 SQL Server CE 运行时一起,在设备模拟器上自动启动。
设置设备模拟器属性
在许多情况下,您可能希望在测试 Windows Mobile 应用程序时使用不同的硬件设置。对于这些场景,设备模拟器允许您模拟许多不同的外围设备。例如,您可以指定特定的电池充电水平,以非常简单的方式在低电量条件下测试您的应用程序。您还可以将虚拟网络适配器绑定到开发计算机上可用的物理网络适配器,并将设备模拟器的虚拟 COM 端口映射到物理 COM 端口。您还可以通过设备模拟器属性在开发计算机和设备模拟器之间共享文件夹。共享文件夹将显示为设备模拟器内的存储卡。利用文件夹共享功能,您可以方便地在设备模拟器和开发计算机之间传输文件。
您可以通过单击设备模拟器 **文件** 菜单上的 **配置** 来显示模拟器属性对话框。
您可以通过单击 Visual Studio 2008 **工具** 菜单上的 **选项**,展开 **选项** 对话框中的 **设备工具**,然后单击 **设备** 来显示相同的对话框。在 **设备** 框中,您可以选择一个模拟器,然后单击 **属性**。现在可以通过单击 **模拟器选项** 来激活 **模拟器属性** 对话框。
将设备模拟器与蜂窝网络模拟器结合使用
在许多情况下,您可能希望将蜂窝网络连接与您的应用程序结合进行测试。例如,您的应用程序可能具有拨打电话的功能,或者您的应用程序可以拦截 SMS 消息以采取某些操作。在上述场景中,设备模拟器非常有用,因为它允许您测试蜂窝网络连接,而无需物理蜂窝网络连接。与设备模拟器协同工作,蜂窝网络模拟器可用于模拟蜂窝网络连接。蜂窝网络模拟器随设备模拟器 2.0 及更高版本一起提供。您可以通过导航到 **开始/所有程序/Windows Mobile 6 SDK/工具/蜂窝网络模拟器** 在 **开始** 菜单中启动它。
在使用设备模拟器与蜂窝网络模拟器结合使用之前,您必须将设备模拟器的串行端口 0 映射到蜂窝网络模拟器状态栏中显示的串行端口。在图 3 中,您可以看到如何在模拟器属性屏幕中将 **串行端口 0** 映射到 **COM3** 以建立与蜂窝网络模拟器的连接。映射串行端口后,必须重置设备模拟器才能使用蜂窝网络模拟器的功能。
除其他外,您可以
- 从设备模拟器拨打电话
- 在设备模拟器上接听电话
- 在设备模拟器中使用 GPRS 连接呼出到网络
- 发送和接收 SMS 或文本消息
- 在 2G 和 3G 网络之间选择
- 分析低级调制解调器命令
设置蜂窝网络模拟器连接
一旦设备模拟器和蜂窝网络模拟器连接成功,您就可以使用蜂窝网络模拟器测试许多与蜂窝网络连接相关的功能。您可以立即从设备模拟器拨打/接听电话,以及发送/接收 SMS 消息。您还可以设置数据连接以通过 GPRS 连接到网络。要做到这一点,您必须在设备模拟器上设置和配置数据连接。有关设置设备模拟器以使用数据连接的更多信息,请访问:http://msdn.microsoft.com/en-us/library/bb158505.aspx。
在图 4 中,您可以看到设备模拟器和蜂窝网络模拟器之间有几个活动的数据连接。在设备模拟器后台,您可以看到正在运行的 Internet Explorer 实例显示了一个特定的网站。信息是通过 GPRS 连接检索的,正如您在蜂窝网络模拟器的状态栏中看到的,其中显示 GPRS 已连接。蜂窝网络模拟器通过利用主机上的网络连接来简单地模拟 GPRS 连接。
在图 4 中,您还可以看到蜂窝网络模拟器的呼叫管理器用于拨打到设备模拟器的电话。在 **电话号码** 编辑框中,您可以简单地输入一个电话号码,然后单击 **拨号** 按钮。您将立即在设备模拟器中看到一个来电通知。您可以看到设备模拟器中的电话号码与从蜂窝网络模拟器中拨打的电话号码一致。
发送和接收 SMS 消息
蜂窝网络模拟器的一个重要功能是能够向设备模拟器发送 SMS 消息,并从设备模拟器接收 SMS 消息。仅仅在设备模拟器上接收 SMS 消息并不令人兴奋。一旦收到 SMS 消息,用户将收到通知,SMS 消息将存储在设备模拟器内的收件箱中。但是,您也可以在自己的应用程序中捕获 SMS 消息。这为许多有趣的可能性打开了大门,您可以远程控制在 Windows Mobile 设备上运行的应用程序。应用程序可以选择拦截 SMS 消息并仅使用它们,或者拦截 SMS 消息然后将其发送到设备上的收件箱。
尤其是在您拦截 SMS 消息以控制自己的应用程序的情况下,您可能需要进行大量测试,这意味着您需要向您的设备发送许多不同的 SMS 消息。设备模拟器和蜂窝网络模拟器的组合对于此类测试场景来说是无价的,因为您不需要物理网络或与电信运营商签订昂贵的合同即可测试整个应用程序。由于本文仅限于解释设备模拟器本身,因此我们不会详细介绍如何以编程方式拦截 SMS 消息。如果您想了解更多关于此主题的信息,可以查阅 MSDN 文档。
在图 5 中,您可以看到一个应用程序的示例,该应用程序捕获以字符串“Control Message”开头的 SMS 消息。每次在设备模拟器上收到带有名为 **SMS Capture** 的示例应用程序的 SMS 消息时,该应用程序都会拦截这些消息。该应用程序在文本框中显示 SMS 消息的正文,并将 `LinkLabel` 控件的 `Text` 属性设置为 SMS 消息发送者的电话号码,允许用户通过简单地单击显示的电话号码来拨打发送者的电话。
使用设备模拟器管理器控制设备模拟器
Visual Studio 2008 包含一个名为设备模拟器管理器的工具,可用于控制开发计算机上安装的所有设备模拟器。您可以从 Visual Studio 中选择 **工具** 菜单上的 **设备模拟器管理器** 来启动它。设备模拟器管理器在树视图中显示所有已安装设备模拟器的列表,并允许您连接到设备模拟器、连接(cradle)、断开连接(uncradle)和关闭设备模拟器等。连接设备模拟器的能力非常有用,因为它允许设备模拟器通过 ActiveSync(在 Windows XP 上)或 Windows Mobile 设备中心(在 Windows Vista 上)连接到开发计算机。一旦连接,它允许设备模拟器同步内容,呼叫互联网,使用 CAB 文件从开发计算机在设备模拟器上安装应用程序等。
**注意**:您必须安装 ActiveSync 或 Windows Mobile 设备中心才能连接设备模拟器。您还必须确保允许通过 **DMA**(直接内存访问)进行连接。您可以查阅 MSDN 文档 了解有关连接设备模拟器的更多信息。
在图 6 中,您可以看到一个带有方形屏幕的 Windows Mobile 6.1 Professional 模拟器,该模拟器是使用设备模拟器管理器启动的。启动模拟器后,还使用设备模拟器管理器连接了它。可以通过 **右键单击** 在显示所有已安装模拟器的树视图中显示的模拟器之一,或通过选择已运行模拟器上的 **操作** 菜单中的条目来从设备模拟器管理器中控制模拟器。一旦连接了设备模拟器,您将看到 ActiveSync 或 Windows Mobile 设备中心变为活动状态,以与设备模拟器建立伙伴关系。
保存设备模拟器配置以备将来使用
使用设备模拟器管理器,可以为任何类型的设备模拟器保存您自己的特定配置。例如,使用您自己的配置,您可以创建一个额外的设备模拟器,该模拟器始终自动以 50% 的电池电量启动,并配置一个指向开发计算机上特定文件夹的存储卡。要开始创建您自己的模拟器配置,请在设备模拟器管理器中选择一个已安装的模拟器,**右键单击** 它,然后选择 **连接**。一旦模拟器运行,您就可以更改其配置,然后可以通过在设备模拟器管理器中再次 **右键单击** 并选择 **另存为** 来保存此特定配置。新创建的模拟器配置会作为全新的模拟器出现在设备模拟器管理器中。它显示在设备模拟器管理器树视图的 **我的设备模拟器** 节点下。创建新的模拟器配置仅仅意味着创建并存储了一个新的设备模拟器配置文件,因为新创建的模拟器配置已经基于一个特定的模拟器映像。因此,创建新的模拟器配置不会占用硬盘上太多的存储空间。
在图 7 中,您可以看到一个设备模拟器配置的示例,该配置具有一个指向开发计算机上 *C:\Users\Public\Documents* 的存储卡,并且模拟在电池电量为 50% 的情况下运行。每次启动此特定设备模拟器时,它都具有这些初始设置。
使用设备模拟器测试不同的安全配置
当您使用设备模拟器测试 Windows Mobile 应用程序时,假设 Visual Studio 2008 和设备模拟器之间有有效的连接,通常不会遇到部署和运行它们的困难。设备模拟器就像一个没有启用安全性的完美 Windows Mobile 设备。根据物理 Windows Mobile 目标设备上的安全设置,您可能对设备有受限的访问。使用 Visual Studio 2008,您可以配置设备模拟器以在特定的安全配置下工作。本文不涉及对 Windows Mobile 设备实现的各种安全配置的描述。如果您想查找有关设备安全配置的更多信息,可以查阅 MSDN 文档。在设备模拟器上设置特定的安全配置相当简单直接。
一旦启动了特定的设备模拟器,您就可以通过转到 Visual Studio 2008 的 **工具** 菜单并选择 **设备安全管理器** 来检索其当前的安全设置。这将在 Visual Studio 2008 的工作区域中显示设备安全管理器。使用设备安全管理器,您可以查看正在运行的设备模拟器的当前安全设置,还可以查看已安装的证书。
**注意**:您还可以使用设备安全管理器来检查物理 Windows Mobile 设备。
要将新的安全配置部署到设备模拟器,您应该执行以下步骤:
- 在 **设备安全管理器** 中选择 **安全配置** 选项卡。
- 在名为 **安全配置** 的列表中选择一个特定的配置。
- 通过单击设备安全管理器中的 **部署到设备** 选项卡,将选定的配置部署到设备模拟器。
自动化设备模拟器管理器
设备模拟器管理器的功能通过一系列 COM 对象暴露,这些对象可用于创建桌面应用程序以以编程方式控制设备模拟器管理器。这意味着,例如,您可以使用 C# 编写一个桌面应用程序来启动和连接特定的设备模拟器。请执行以下步骤来创建一个利用设备模拟器功能的桌面应用程序:
- 使用 Visual Studio 2008 创建一个 Visual C# Windows 应用程序。
- 添加对 **Microsoft.DeviceEmulatorManager.Interop.9.0** 程序集的引用。
**注意**:即使您使用的是更高版本的设备模拟器,所需的程序集仍会在 _\Program Files\Microsoft Device Emulator\1.0\Microsoft.DeviceEmulatorManager.Interop.9.0.dll_ 文件夹中找到,因为每个新版本的设备模拟器都是对先前版本设备的就地升级。
- 要添加代码以在树视图控件中显示开发计算机上包含模拟器映像的所有数据存储,您可以使用例如此代码片段在主窗体的 `Load` 事件处理程序中查询
IDeviceEmulatorManager
接口。string categoryName; TreeNode categoryNode; IDeviceEmulatorManager emulatorManager = new DeviceEmulatorManagerClass(); emulatorManager.Reset(); try { while (true) { categoryName = emulatorManager.get_Name(); categoryNode = new TreeNode(categoryName); ListDeviceEmulatorSDKs(emulatorManager, categoryNode); tvEmulators.Nodes.Add(categoryNode); emulatorManager.MoveNext(); } } catch (COMException ex) { if (ex.ErrorCode != END_OF_DATA) throw ex; }
- 以类似的方式,您可以通过创建类似的 `while` 循环并使用
IEnumManagerSDKs
接口来检索所有已安装的模拟器族(由 SDK 表示)。 - 在检索所有模拟器族之后,您可以以另一种类似的方式,在另一个 `while` 循环中使用
IEnumVMIDs
接口来检索属于 SDK 的所有特定模拟器映像。 - 一旦您可以访问特定的设备模拟器,您就可以调用方法来控制该模拟器,例如,通过在
IDeviceEmulatorManagerVMID
接口上调用其 `Connect`、`Cradle`、`Uncradle` 和 `Shutdown` 方法。
有关设备模拟器管理器自动化可能性的更多信息,请参阅本文。
本系列相关文章
- Windows Mobile 应用开发 第 1 部分:创建您的第一个应用程序
正确安装 VS2008 和 Windows Mobile SDK 以创建您的第一个移动应用程序。www.myrampup.com 的第 1 部分(共 7 部分)。
- Windows Mobile 应用开发第三部分:Windows Mobile 设备的 Windows Forms 应用开发基础
学习开发 Windows Mobile 设备上基于 Windows Forms 的应用程序的基础知识。
- Windows Mobile 应用开发第四部分:添加自定义控件并利用 GPS 硬件
学习如何在应用中添加自定义控件并利用 GPS 硬件。
- Windows Mobile 应用开发第五部分:SQL Server CE 入门
学习在移动应用中通过
DataSet
和SQLCeResultSet
访问数据。 - Windows Mobile 应用开发第六部分:设备安全和应用程序部署
了解设备安全、测试以及在 Windows Mobile 设备上安装应用程序。
- Windows Mobile 应用开发第七部分:移动 Web 开发
了解如何使用浏览器控件创建支持 AJAX 的移动设备 Web 应用程序。
其他资源和参考
请访问 www.myrampup.com 获取更多信息。