Windows Mobile 5.0 中为开发人员提供的新功能(2)
2007-10-28 23:16

消息处理

除了提供对 PIM 数据的访问以外,Pocket Outlook 对象模型还分别通过“Microsoft.WindowsMobile.PocketOutlook.EmailAccount”和“Microsoft.WindowsMobile.PocketOutlook.SmsAccount”命名空间为电子邮件和 SMS 消息提供了托管支持。这些命名空间中的类使托管代码开发人员能够容易地将消息处理集成到他们的应用程序中。

对于需要集成电子邮件功能的托管应用程序开发人员,EmailAccount 类提供了完整的电子邮件功能,包括对附件的支持。下面的代码演示开发人员可以如此容易地发送电子邮件。该示例使用 ChooseContactDialog 提示用户选择要向其发送电子邮件的联系人。然后,代码创建一个电子邮件,附加一个 Pocket Excel 工作簿,然后通过使用设备的主电子邮件帐户将该邮件发送给所选择的联系人。

using Microsoft.WindowsMobile.PocketOutlook;
            using Microsoft.WindowsMobile.Forms;
            // ...
            ChooseContactDialogcontactDialog = new ChooseContactDialog();
            contactDialog.Title = "Select user to send message";
            if (contactDialog.ShowDialog() == DialogResult.OK)
            {
            EmailMessage message = new EmailMessage();
            message.To.Add(
                   new Recipient(contactDialog.SelectedContact.Email1Address));
            message.Subject = "MEDC Session List";
            message.BodyText =
                   "I've attached the list of MEDC sessions - hope to see you there";
            message.Attachments.Add(new Attachment(@"\My Documents\Sessions.xls"));
            using (OutlookSessionsession = new OutlookSession())
            {
                 session.EmailAccounts[0].Send(message);
            }
            }
            

SMS 仍然是一种非常流行且有效的通信机制。Windows Mobile 5.0 托管应用程序开发人员可以将 SMS 信息的发送和接收完全集成到他们的应用程序中。

下面的代码使用 ChooseContactDialog 提示用户选择联系人。然后,代码使用设备的已配置的 SMS 帐户向用户选择的联系人发送邮件,然后请求回执。

using Microsoft.WindowsMobile.PocketOutlook;
            using Microsoft.WindowsMobile.Forms;
            // ...
            ChooseContactDialogcontactDialog = new ChooseContactDialog();
            contactDialog.Title = "Select user to send message";
            if (contactDialog.ShowDialog() == DialogResult.OK)
            {
            // Construct message requesting delivery receipt
            SmsMessage message = new SmsMessage(
                   contactDialog.SelectedContact.MobileTelephoneNumber,
                   "R U Going to the Keynote?");
            SmsMessage message.RequestDeliveryReport = true;
            // Send message
            message.Send();
            }
            

Windows Mobile 5.0 还使 SMS 邮件的截获和处理变得容易。开发人员可以使用“Microsoft.WindowsMobile.PocketOutlook.MessageInterception”命名空间中的类(位于 Microsoft.WindowsMobile.PocketOutlook 程序集中)创建 .NET Compact Framework 应用程序,以截获和处理发送到设备的 SMS 信息。

该信息截获机制具有高度的可配置性,从而使应用程序可以在 SMS 信息中注册基于内容的兴趣。开发人员可以对设备进行编程,以便基于发送者、接收者或信息内容向应用程序发出有关信息的通知。开发人员还可以对截获系统进行编程,以便在请求通知的应用程序尚未运行时启动它。表 4 显示一些信息截获类。

表 4. 常用的 SMS 信息截获托管类
说明

MessageInteceptor

在满足指定条件的信息到达时引发事件。该类根据情况在请求通知的应用程序尚未运行时启动它。

MessageCondition

标识要满足的信息条件。

MessageInteceptorEventHandler

由那些注册以便接收信息通知的类实现的委托类型。

配置管理器

Windows Mobile 引入了配置管理器,它极大地简化了 Windows Mobile 设备的配置和部署,这是因为开发人员可以通过使用 XML 设置设备的几乎所有可配置的方面。通过使用 Microsoft.WindowsMobile.Configuration.ConfigurationManager 类,托管开发人员现在可以充分利用该功能。

ConfigurationManager 类包含两个静态方法:ProcessConfigurationTestConfiguration。托管开发人员可以使用 ProcessConfiguration 配置电子邮件、安全策略、本地化、主屏幕、虚拟专用网络 (VPN) 设置、文件系统以及其他设置。该类向开发人员提供了对所有设备配置问题的一站式解决方式。TestConfiguration 使托管开发人员可以在不影响任何设备设置的前提下验证配置 XML 的有效性。下面的示例演示了如何使用 ProcessConfiguration 将 MSDN Mobility Web 站点添加到设备浏览器收藏夹中。

using System.Xml;
            using Microsoft.WindowsMobile.Configuration;
            // ...
            string configurationXml =
            @"<wap-provisioningdoc>
                   <characteristic type='BrowserFavorite'>
                     <characteristic type='MSDNMobility'>
                       <parm name='URL' value='http://msdn.microsoft.com/mobility'/>
                     </characteristic>
                   </characteristic>
                 </wap-provisioningdoc>";
            // Load XMLinto the DOM
            XmlDocument configurationXmlDoc = new XmlDocument();
            configurationXmlDoc.LoadXml(configurationXml);
            // Send to Configuration Manager
            ConfigurationManager.ProcessConfiguration(configurationXmlDoc, false);
            

本机和托管开发人员都可以使用的新增 API

随着 Windows Mobile 平台的发展,越来越多的本机和托管开发人员正在开发丰富的、完善的应用程序。为了满足这两组开发人员的共同需要,Windows Mobile 5.0 的很多新功能直接公开本机和托管 API。包括托管 API 以使其成为 Windows Mobile 5.0 平台本身的一部分,使得这些 API 可供所有托管开发人员使用,而无需考虑应用程序使用的 .NET Compact Framework 的具体版本。

State and Notification Broker API

Windows Mobile 5.0 引入了一种新的非常强大的工具,称为 State and Notification Broker API。State and Notification Broker API 提供用于存储设备、应用程序和系统状态信息的统一机制。它不仅是一个统一的存储,而且还提供了集中式通知体系结构,从而使应用程序可以容易地注册通知,并且可以选择在感兴趣的值更改时启动应用程序。该模型还使应用程序可以容易地共享它们自己的状态信息。

Windows Mobile 5.0 设备随附了远远超过 100 个不同的状态值,它们可以通过 State and Notification Broker API 获得。这些可用值提供各种各样的,与设备本身和标准 Windows Mobile 5.0 应用程序有关的信息。下表只是可以通过 State and Notification Broker 获得的信息的一部分示例:

活动应用程序

设备的 ActiveSync 状态

当前电池电平

是否有照相机连接到该设备

是否插入了耳机

Media Player 中当前播放的歌曲名称

未读的 SMS 信息个数

未读的电子邮件个数

当前是否正在通话

当前是否正在进行会议呼叫

当前是否可以使用 GPRS 连接

设备当前是否连接到 VPN

未接电话呼叫的个数

电话的移动运营商的名称

当天预定的任务数

除了上述项以外,原始设备制造商 (OEM) 和应用程序开发人员还可以扩充该列表。开发人员可以轻松地设计应用程序以检索任何 State and Notification Broker API 存储值,并且如果需要的话,则开发人员可以设计应用程序以监视一个或多个值的更改。

State and Notification Broker 的基础实现依赖于注册表。每个提供程序都会创建一个注册表项,向该项添加值,以表示各个状态值。在提供程序创建该注册表项以后,State and Notification Broker 会监视该值的更改,并且自动通知已经注册了对该值的兴趣的所有各方。所有系统状态属性都存储在 HKEY_CURRENT_USER\System\State HKEY_LOCAL_MACHINE\System\State 下面。这些项都被加以保护,允许不受信任的应用程序进行只读访问。应用程序可以将它们自己的状态值添加到 HKEY_CURRENT_USER\Software\StateHKEY_LOCAL_MACHINE\Software\State 中。

如果本机开发人员希望检索通知,则他们具有多个选择,包括 Windows 消息、回调函数和消息队列。那些希望创建通知提供程序的开发人员可以在某个适当的注册表位置下面创建一个项,并且使用 RegistrySetDWORDRegistrySetString 函数来创建和修改该项下面的值。表 5 列出常用的本机 State and Notification Broker 函数。

表 5. 常用 State and Notification Broker API 本机函数
函数 说明

RegistryNotifyApp

通过将 Windows 消息发送到应用程序窗口,将指定状态值的更改通知给应用程序。如果该应用程序尚未运行,则 State and Notification Broker API 会启动它。

RegistryNotifyWindow

通过将 Windows 消息发送到应用程序窗口,将指定状态值的更改通知给应用程序。

RegistryNotifyMsgQueue

通过向命名的消息队列发送通知,将指定状态值的更改通知给应用程序。

RegistryNotifyCallback

通过调用传递的回调函数,将指定状态值的更改通知给应用程序。

RegistryGetDWORD / RegistryGetString

检索当前状态值。

RegistrySetDWORD / RegistrySetString

由 State and Notification Broker API 提供程序用来创建和修改状态值。

RegistryTestExchangeDWORD

由 State and Notification Broker API 提供程序用来有条件地修改状态值,并且将测试和更新作为单个原子操作予以执行。

托管开发人员通过使用属于“Microsoft.WindowsMobile.Status”命名空间和同名程序集的类与 State and Notification Broker 交互。标准委托机制用于向托管类发送状态更改通知。表 6 显示常用托管类的列表。

表 6. 常用 State and Notification Broker API 托管类
函数 说明

RegistryState

封装被监视的状态值,包括检索值、监视该值的更改以及在该值更改时根据情况启动应用程序。

SystemState

提供公共系统状态值之上的抽象,并且通过属性提供对这些值的访问。

图片选择对话框

随着应用程序越来越多地合并了照片和图形,这些应用程序需要一种容易的方式来向用户呈现图片列表,以供用户选择。为了满足这一需要,Windows Mobile 5.0 提供了图片选择对话框。该对话框通过 GetFileNameEx 函数提供给本机开发人员;对于托管开发人员,它是通过 Microsoft.WindowsMobile.Forms.SelectPictureDialog 类公开的。图 2 显示图片选择对话框。


2. 图片选择对话框。单击缩略图查看大图像。

图片选择对话框具有高度的可配置性,并且使应用程序开发人员可以用多种方式控制该对话框的行为,包括限制用户可能浏览图像的位置、控制是否允许用户浏览来自附加照相机(如果存在)的图像以及应该如何处理受 DRM 保护的文件。

照相机捕获 API/SHCameraCapture

支持照相机的设备极为受欢迎。由于这些设备的使用范围是如此之广,因此应用程序开发人员现在有机会通过将静止图像和视频图像的捕获直接集成到他们的应用程序中来切切实实地增强用户体验。为了使应用程序开发人员能够轻松地提供该功能,Windows Mobile 5.0 提供了照相机捕获对话框。

照相机捕获对话框为应用程序开发人员提供一种独立于设备的方式,以便将照片、视频和带声音的视频的捕获集成到他们的应用程序中。该对话框为开发人员提供了对照相机捕获过程的完整控制,包括捕获的类型、质量和最大长度(仅限于视频)。本机开发人员通过 SHCameraC