UX/UI
可调大小的窗口让用户能够更自如地控制应用的使用方式。新功能让你能够使用应用磁贴执行更多操作。更新了搜索、共享和超级按钮,能为用户创建更为统一的总体体验。
- 可调大小的窗口
- 搜索更新
- 共享更新
- 在每个屏幕上运行的超级按钮
- 与人脉和事件集成
- 语音合成
- 对后台任务管理的更新
- 锁定屏幕上的警报应用支持
- 工作项目计划更新
可调大小的窗口
Windows 8.1 对窗口大小和位置进行了一些更改。在你开发适用于 Windows 8.1 的应用时,以下是几点需要注意的地方:
Windows 8.1 没有固定宽度的视图状态。用户现在可以将应用大小持续下调到最小宽度。(应用的默认最小宽度为 500 像素。)因此应用不再有贴靠和填充视图状态。这样,你就可以将应用大小降低到最小,从而开发出功能更好、外观更佳的应用。
注意 Windows 8 中的贴靠视图宽度为 320 像素。 默认的最小宽度为 500 像素,比 Windows 8 的辅屏视图更大。
如果应用在较小大小时效果较好,并且你希望鼓励用户将应用保持在屏幕上,可以将最小宽度更改为 320 像素。
用户可以在屏幕上同时放置两个以上的应用。因此,你的应用可能显示在其他两个应用之间,既不靠近屏幕左侧,也不靠近屏幕右侧。
一个应用可以在同一时间打开多个窗口。
一个应用可以启动另一个应用。出现这种情况时,如果空间足够,则两个应用通常会均分占据屏幕。但是你可以更改这种情况,以便启动的应用比原有应用更宽或更窄,或该应用甚至替换了屏幕上的原有应用。要更改该默认行为,请使用 DesiredRemainingView 属性。
应用必须填满屏幕高度,跟在 Windows 8 中一样。应用的最小高度为 768 像素。
可调大小窗口的设计指南
当你设计适用于 Windows 8.1 的应用时,必须:
确保应用布局和控件缩小到最小大小。尤其应当思考应用的大小会对以下控件造成什么影响:
将你的应用设计为有效使用大屏幕上的空间,并且具有自动重排的布局。不要留下大片空白空间。
如果你将最小宽度更改为 320 像素,请在应用的宽度较窄时(即在 320 像素和 500 像素之间)使用如下方法调整应用:
还提供了更多适用于调整为 320 像素宽的窗口和高度大于宽度的窗口的布局示例。有关不管应用大小都使用超级按钮的详细信息,请参阅超级按钮在每个屏幕上的有效性。
设置最小宽度
如果你希望更改应用的默认最小宽度 500 像素,则可以在应用部件清单中指定 ApplicationView 元素的 MinWidth 属性。
<Application>
<VisualElements>
<ApplicationView MinWidth=”width320” />
</VisualElements>
</Application>
有关应用部件清单的详细信息,请参阅应用包清单。
ApplicationView 类的更新
在 Windows 8.1 中,Windows.UI.ViewManagement 命名空间具有如下新枚举:
ApplicationView 类具有如下新属性:
ApplicationView 也有如下新方法:
在 Windows 8.1 中,以下成员遭到弃用:
ApplicationView.Value 属性—无效,因为应用不再有固定宽度的视图状态。因而,你可以使用 Orientation 属性获取应用窗口的方向,以及 AdjacentToLeftDisplayEdge、AdjacentToRightDisplayEdge 和 IsFullScreen 属性来获得应用的位置。
ApplicationView.TryUnsnap 方法—无效,因为应用不再有特定的贴靠状态,并且默认最小宽度为 500 像素。
ApplicationViewState 枚举—无效,因为应用大小可以持续调整,而且不再有固定宽度的视图状态。
磁贴更新
Windows 8.1 对磁贴进行了如下更改,并引入了几种使用方式。
新的磁贴大小
在 Windows 8 中,磁贴大小有两种:
- 正方形磁贴(150×150 像素,缩放比例为 1x)。
- 长方形磁贴(310×150 像素,缩放比例为 1x)
在 Windows 8.1 中,还有另外两种大小的磁贴:
- 小磁贴(70×70 像素,缩放比例为 1x)
- 大磁贴(310×310 像素,缩放比例为 1x)
因为四种模板类型的磁贴中有三种为正方形,所以在 Windows 8 中原来称作“正方形”磁贴的磁贴(150×150 像素,缩放比例为 1x)现在被称作“中等”磁贴。于是,整个系列的磁贴分为小、中等、长方形和大四种。以下是这四种类型磁贴的一些示例。
一个中等磁贴可以容纳四个小磁贴。小磁贴不支持动态磁贴通知,但支持锁屏提醒。大磁贴占用的空间与两个长方形磁贴相同,并支持动态磁贴通知,正如 Windows 8 磁贴大小一样。
磁贴模板的新命名约定
随着新磁贴大小的加入,我们还为磁贴模板更新了 Windows 8 命名约定。新命名约定使用绝对像素大小,缩放比例为 1×。如下所示,四种磁贴大小分别为新名称相对应,每个类别都有多个模板:
- 小 = Square70x70
- 中等 = Square150x150
- 长方形 = Wide310x150
- 大 = Square310x310
同样地,SmallLogo 属性现在应用部件清单中被称为 Square30x30Logo。
在新的命名约定下,现有磁贴模板均会被重命名。
旧名称 | 新名称 | 示例 |
---|---|---|
TileSquare* | TileSquare150x150* | TileSquareImage(旧名称)/ TileSquare150x150Image(新名称) |
TileWidexxx |
TileWide310x150xxx |
TileWideImageAndText01(旧名称)/ TileWide310x150ImageAndText01(新名称) |
出于兼容性考虑,旧名称仍然能够识别。但是,请在新开发过程中使用新名称。
应用部件清单中与磁贴相关的变更
将主应用磁贴的默认属性进行如下声明—其支持的大小、应用部件清单中—的显示名称和磁贴颜色。
选择新磁贴大小
在 Windows 8 中,你可以通过在应用部件清单 (manifest) 中指定长方形磁贴资产的方式来选择为应用支持长方形磁贴。在 Windows 8.1 中,你可以通过在清单中指定大磁贴资产的方式来选择支持大磁贴(正方形,310x310)。
注意 你的应用只有在支持长方形磁贴的情况下才能支持大磁贴。
所有应用都支持中等磁贴(正方形,150x150)和小磁贴(正方形,70x70)。另外,你可以在清单中提供小磁贴资产。如果你的应用不提供小磁贴图像,Windows 8.1 会通过自行缩放或提供单独资产的方式,自动缩小你的中等磁贴图像。
在 Windows 8 中,对于支持的每种磁贴大小,我们建议为四种缩放比例(0.8x、1x、1.4x 和 1.8x)中的每一种都提供单独资产。这能确保你的磁贴始终清晰,不会有任何缩放痕迹。另外,为了更好地支持辅助功能,你可以为高对比度主题提供图像资产。
以不同磁贴大小显示应用名称
在 Windows 8 中,应用部件清单 (manifest) 用于指定哪些磁贴大小显示应用名称。在 Windows 8.1 中仍然如此,但有一种新的格式。请注意,小磁贴(正方形,70x70)上无法显示应用名称。
声明默认固定大小
在 Windows 8 中,如果某个应用支持长方形磁贴,则作为长方形磁贴固定到“开始”屏幕,否则将作为中等磁贴。在 Windows 8.1 中,你可以选择性地覆盖这个默认大小,并声明中等磁贴或长方形磁贴(但不包括小磁贴或大磁贴)为默认固定大小。但请不要忘记,在 Windows 8.1 中,你的应用不会在安装过程中自动固定到“开始”屏幕。它会在“所有应用”视图中显示,用户必须从中明确选择将应用固定到“开始”屏幕。
应用部件清单架构的变化
现在你可在自己的清单中指定额外命名空间 "https://schemas.microsoft.com/appx/2013/manifest",以包括声明我们已讨论过的新功能的计划元素。下面的示例显示了清单中某些已重命名的新属性。请注意,大磁贴资产包含在 DefaultTile 元素下,该元素也明确声明了首选默认大小。此应用也会选择只在中等磁贴和长方形磁贴上,而不在大磁贴上显示其应用名称。
<Package
xmlns="https://schemas.microsoft.com/appx/2010/manifest"
xmlns:wb="https://schemas.microsoft.com/appx/2013/manifest">
...
<wb:VisualElements
DisplayName="Your app name"
Description="App description"
BackgroundColor="#464646"
ForegroundText="light"
ToastCapable="true"
Square150x150Logo="Assets\Medium150x150Tile.png"
Square30x30Logo="Assets\APVLogo.png">
<wb:DefaultTile
Square70x70Logo="Assets\Small70x70Tile.png"
Wide310x150Logo="Assets\Wide310x150Tile.png"
Square310x310Logo="Assets\Large310x310Tile.png"
ShortName="App"
DefaultSize="square150x150Logo">
<wb:ShowNameOnTiles>
<wb:ShowOn Tile="square150x150Logo"/>
<wb:ShowOn Tile="wide310x150Logo"/>
</wb:ShowNameOnTiles>
</wb:DefaultTile>
<wb:LockScreen
Notification="badgeAndTileText"
BadgeLogo="Assets\badge.png"/>
<wb:SplashScreen Image="Assets\SplashScreen.png"/>
</wb:VisualElements>
磁贴通知的变化
当你发送磁贴通知时,请记住,你的应用只有在 Windows 8.1 或 Windows 8 上运行时才能收到通知。因为现有模板的新名称只能由 Windows 8.1 识别,所以该架构添加了一个 fallback 属性。通过加入 fallback 属性,你的通知负载可以指定一个 Windows 8.1 模板和一个 Windows 8 模板,以便能在 Windows 8 系统中接收通知。若要使用新的模板名称和 fallback 属性,请在此处显示的 visual 元素中加入新的 version 属性,并将其值设为 2。
<tile>
<visual version="2">
<binding template="TileSquare150x150Image" fallback="TileSquareImage" branding="None">
<image id="1" src="Assets/Images/w6.png"/>
</binding>
<binding template="TileWide310x150Image" fallback="TileWideImage" branding="None">
<image id="1" src="Assets/Images/sq5.png"/>
</binding>
<binding template="TileSquare310x310Image" branding="None">
<image id="1" src="Assets/Images/sq6.png"/>
</binding>
</visual>
</tile>
请注意,现在你无法将 fallback 属性用于大磁贴,因为 Windows 8 中并不存在大磁贴。Windows 8 通知在 Windows 8.1 中能够无任何变化地正常工作,但不能使用大磁贴。
注意 负载中包含的任何大磁贴(正方形,310x310)模板都必须作为最后一个列出的绑定。如果 Windows 8 系统无法通过模板或回退名称识别所找到的绑定,则会停止对通知进行分析。因此,只要遇到 310×310 绑定,它就会停止。
为通知队列指定磁贴大小
在 Windows 8 中,当你启用通知队列后,则也为中等磁贴和长方形磁贴启用了通知队列。Windows 8.1 向 TileUpdater 类添加了方法,让你能够为特定大小的磁贴启用通知队列。
新磁贴大小和辅助磁贴中的备用徽标
在 Windows 8.1 中,用户将内容作为辅助磁贴固定时可看到一个浮出控件,而通过此控件可以浏览该辅助磁贴的所有可用大小和外观,并从中进行选择。辅助磁贴支持其应用磁贴支持的任何大小的磁贴。如果你不为辅助磁贴指定特定小磁贴,那么 Windows 8.1 会缩小正方形磁贴图像并使用缩小后的磁贴图像。
除了默认的辅助磁贴图像之外,你还可以为每种大小的磁贴提供最多三个备用版本,最多可达到 12 个版本。你也可以使用 AlternateVisualElements 方法为支持徽标的三种大小的磁贴(正方形磁贴、长方形磁贴、大磁贴)每种指定一个备用小徽标。
辅助磁贴的排序对注音字符串的支持更准确
在某些基于字符的语言(如日语)中,UI 中的排序顺序是以组成该应用显示名称的字符的注音拼写为基础的。此注音拼写是一个从显示名称中分离的独立字符串。固定辅助磁贴时,用户可以在固定浮出控件中为该磁贴指定一个显示名称,但是无法指定注音拼写。Windows 会针对注音字符串进行猜测,但不一定正确。
应用有时知道正确的注音字符串,因为用户已通过该应用提供的自定义控件定义了该字符串。在 Windows 8.1 中,应用随后可以通过新的 SecondaryTile.PhoneticName 属性将该字符串传递给 Windows。请注意,此注音名称字符串是与辅助磁贴关联的默认显示名称绑定的。因此,如果用户通过固定浮出控件更改其显示名称,那么系统将使用注音拼写猜测代替。
搜索更新
[立即获取 SearchBox 控件示例。]
Windows 8.1 中引入了一个新的搜索框控件,帮助你为使用 XAML 的应用和使用 JavaScript 的应用分别提供如下搜索结果:Windows.UI.Xaml.Controls.SearchBox 和 WinJS.UI.SearchBox。
你的应用现在可以将该搜索框作为元素加入标记中了。新控件支持完整的模板和样式制作。
在 Windows 8.1 中,应用搜索体验完全由应用所控制。 此搜索框与“搜索”合约集成,可以增强用户体验并实现深层次的自定义,从而使你的应用能够提供按照用户需求打造的体验。
搜索框支持应用提供的搜索建议和结果、应用特定搜索历史记录,并对触控、键盘及鼠标交互提供完整支持。
搜索框布局如下所示。
下面是搜索框控件内显示的几个搜索结果示例。
搜索框控件支持输入法编辑器 (IME) 集成。
当用户使用 IME 键入每个字母时,建议都会随之更新。建议包括根据部分拼音输入内容推测的中文表意字符。 IME 候选 UI 不影响搜索建议弹出框。 搜索框支持使用键盘输入,以便在文本框、IME 候选列表和搜索建议中进行导航。
共享更新
Windows 8.1 将这些变化都带到了共享体验中,也相应改变了在应用中使用“共享”合约的方式。
向 DataPackage 添加新数据格式
在 Windows 8.1 中,“共享”合约的源应用可以提供多种方式回到正在共享的内容。 Windows 8.1 在 DataPackage 中将 Uri 格式拆分为两种新数据格式,同时在 DataPackagePropertySet 中引入了四种新的强类型属性。对于 DataPackage,Uri 格式已被弃用,并由 WebLink 和 ApplicationLink 格式所代替。
如果用户未选择任何内容,则共享 WebLink,因此源应用会共享隐式选择的已显示内容。通过填充此格式,源应用将当前页面的内容共享为统一资源标识符 (URI)。 共享的链接会引用用户正在查看的网页,所以此格式将始终以 http 或 https 开头。
如果用户未选择任何内容,还会共享 ApplicationLink,因此源应用会共享隐式选择的已显示内容。通过填充此格式,源应用将当前页面的内容共享为 URI。共享 URI 的架构由源应用处理。使用此 URI 协议激活源应用后,源应用会显示与用户当前查看的内容相同的内容。此格式使用一个应用协议提供一种返回共享内容的方法,并以此方式表示该共享内容。
WebLink 和 ApplicationLink 格式并不是独有的。指向 Web 上内容的 WebLink 链接和指向应用中内容的 ApplicationLink 链接。例如,一个新闻阅读器应用可能同时具有这两种形式的内容,并且包含一个 URI,可以让用户返回到该应用中的文章或转到网站上的相同文章。目标应用选择如何处理该 URI。例如,“邮件”应用可能使用 WebLink 格式,因为此链接可能会被发送至 Internet 并通过非 Windows 系统使用。但是,该阅读器应用可能使用 ApplicationLink 格式,因此会重新激活源应用并将用户返回至原始内容。
ContentSourceWebLink 是一种可用于找到共享内容归属的随附属性。当应用提供一个指向正在共享的内容的 Web 链接后,该属性就会被共享。当用户做出显式选择时,WebLink 格式不会被填充,因为 WebLink 格式的值与用户选择的值不一致。填充此信息并不意味着用户会选择该网页,而只是说明内容来自该网页。
ContentSourceApplicationLink 是第二种可用于找到共享内容归属的随附属性。当应用发现其对用户返回应用中当前显示的内容有较大意义时,就会将其共享。当用户做出选择时,ApplicationLink 格式不会被填充,因为这种情况下 ApplicationLink 格式的值与用户选择的值不一致。填充此信息并不意味着指向该应用的深层链接就是用户所选择的对象,而只是说明内容来自该链接。
例如,某个用户在阅读器应用中阅读一篇文章。该用户选择了一段引用内容并将其共享给 OneNote。若要确定这段引用内容属于该文章,阅读器应用不会使用 WebLink 或 ApplicationLink 格式,因为该文章并不等同于共享的引用内容。因此,该应用将改为使用 ContentSourceWebLink 和 ContentSourceApplicationLink 属性。OneNote 会将所选文本与源归属一同添加。随后在 OneNote 中,用户可以阅读此引用内容,以及返回阅读器应用或网页来阅读此引用内容的上下文。
改进共享响应速度
在 Windows 8.1 中,使用“共享”合约的应用能够以编程方式关闭共享窗格,从而提高响应速度。
调用新 DismissUI 方法关闭共享窗格。调用 DismissUI 与用户关闭共享窗格类似,只需在外部点击即可。如果共享操作耗费时间较长,应用将继续运行。如果共享操作耗费时间不长,那么在终止之前将有 10 秒钟的时间运行。
目标应用当前无法将其自身移出屏幕。因此,当共享操作开始时,应用通常会显示一个进度指示器,用户须等待至操作完成(即使完成该操作无需其他用户交互)。虽然用户通过轻轻点击一下关闭浮出控件的操作实际上是安全的,但用户通常觉得在共享操作结束前就关闭会导致数据丢失,因此他们一般不会这么做。DismissUI 会让你的应用自动关闭浮出控件。
程序包系列名称
在 Windows 8.1 中,“共享”合约的源应用可以向目标应用提供一个程序包系列名称,因此在启动由 ApplicationLink 指定的应用时,这些目标应用会带来回退体验。
程序包系列名称是应用包的唯一标识符。当某个源应用将此标识符发给目标应用后,目标应用将通过调用 LaunchUriAsync 方法以及提供的 ApplicationLink 带来回退体验。如果因为用户卸载了应用导致 URI 的架构没有处理,或者如果 URI 漫游到另一个未安装该应用的设备,那么会显示一个对话框,告知用户在 Windows 应用商店中查找某个应用。默认情况下,用户会被带往 Windows 应用商店,但不会转到所需应用。如果你在传递到 LaunchUriAsync 的 LauncherOptions 对象中加入程序包系列名称,那么用户将收到有关要安装的特定应用的提示,并被转到该应用在 Windows 应用商店中的页面。
URI 格式已弃用
之前已经提到,Windows 8.1 在 DataPackage 中将 Uri 格式拆分为两种新数据格式,同时在 DataPackagePropertySet 中引入了四种新的强类型属性。对于 DataPackage,Uri 格式已被弃用,并由 WebLink 和 ApplicationLink 格式所代替。Uri 格式作为 WebLink 格式的别名保留下来。
在每个屏幕上运行的超级按钮
在 Windows 8 中,当屏幕上有多个应用并且用户调用超级按钮时,系统为占用最大屏幕空间的应用显示超级按钮。 在 Windows 8.1 中,系统将为用户与之交互的最后一个应用显示超级按钮,不管屏幕上有多少个应用或是否有多个屏幕均是如此。例如,如果用户选择“设置”超级按钮,系统会为使用的最后应用显示“设置”浮出控件。
对应用进行设计,使其可以使用超级按钮,而不管应用的大小如何。特别是“设置”弹出窗口的宽度必须小于或等于应用的当前宽度。
构建与人脉和事件集成的应用
[立即获取联系管理器 API、约会 API 和处理联系人动作示例。]
Windows 8.1 让你能够将人脉和事件的强大功能集成到应用中。你可以让用户在应用内查询有关认识的人的信息,并通过包括消息、电子邮件、电话、视频通话等在内的集成通信体验来与他们进行互动。你也可以让用户在应用中快速查看可用的日历,并在自己喜爱的日历中添加活动,从而留住这些用户。
使用这些新的 API 可以让你的应用能够查看人脉联系人卡片,并能通过应用管理各种活动:
-
让应用能够在操作系统中查询某个用户的联系方式并在联系人卡片中显示其联系数据。
AppointmentsProvider 命名空间
通过与约会提供程序交互的激活方式,支持添加约会、替换约会和删除约会请求。
-
让应用能够与用户的约会提供程序交互,从而进行活动的添加、替换和删除操作。另外,也能显示约会提供程序的主 UI。
Activation 命名空间
让应用能够处理 Windows 支持的新约会提供程序和联系合约的激活参数。
语音合成
[立即获取语音合成示例。]
Windows 8.1 引入了 Windows.Media.SpeechSynthesis API,该 API 支持 Windows 应用商店应用中的语音合成—也称为文本到语音转换 (TTS)—功能。
使用语音合成可以提示用户进行输入、突出显示应用通知和消息对话、提供说明(如分步导航)和阅读诸如文本或电子邮件、RSS 源、书籍和搜索结果之类的内容。
Windows 8.1 中包含大量语音合成引擎,称为声音。每种声音都有一个友好名称,例如 Microsoft David(美国英语,男声)、Microsoft Zira(美国英语,女声)和 Microsoft Hazel(英国英语,女声),你可以在应用中进行指定,也可以由用户在语言控制面板中进行选择。
使用 Windows 8.1 支持的语音合成功能可以:
将语音合成器设置为特定的性别、声音和语言。
使用当前声音的默认特性和属性从纯文本字符串生成语音输出。
从包含语音合成标记语言 (SSML) 的字符串生成语音输出,以便自定义声音的特性、发音、音量、音高、频率、语速、重音等。
从随机访问流读取语音合成引擎生成的音频数据,或将语音合成引擎生成的音频数据写入随机访问流。
从纯文本生成语音
此示例显示了 Windows 应用商店应用如何使用 SpeechSynthesizer 对象创建音频流,然后又如何根据纯文本字符串生成语音的。
// The object for controlling and playing audio.
var audio = new Audio();
// The object for controlling the speech-synthesis engine (voice).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Generate the audio stream from plain text.
synth.synthesizeTextToStreamAsync("hello World").then(function (markersStream) {
// Convert the stream to a URL Blob.
var blob = MSApp.createBlobFromRandomAccessStream(markersStream.ContentType, markersStream);
// Send the Blob to the audio object.
audio.src = URL.createObjectURL(blob, { oneTimeOnly: true });
audio.play();
});
// The media object for controlling and playing audio.
MediaElement mediaElement = this.media;
// The object for controlling the speech-synthesis engine (voice).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Generate the audio stream from plain text.
SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync("Hello World");
// Send the stream to the media object.
mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();
从语音合成标记语言 (SSML) 生成语音输出
下一个示例显示了 Windows 应用商店应用如何使用 SpeechSynthesizer 对象创建音频流,然后又如何根据 SSML 文本字符串生成语音的。
// The string to speak with SSML customizations.
var Ssml = "<speak version='1.0' " +
"xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" +
"Hello <prosody contour='(0%,+80Hz) (10%,+80%) (40%,+80Hz)'>World</prosody> " +
"<break time='500ms' />" +
"Goodbye <prosody rate='slow' contour='(0%,+20Hz) (10%,+30%) (40%,+10Hz)'>World</prosody>" +
"</speak>";
// The object for controlling and playing audio.
var audio = new Audio();
// The object for controlling the speech-synthesis engine (voice).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Generate the audio stream from SSML.
synth.synthesizeSsmlToStreamAsync(Ssml).then(function(synthesisStream){
// Convert the stream to a URL Blob.
var blob = MSApp.createBlobFromRandomAccessStream(synthesisStream.ContentType, synthesisStream);
// Send the Blob to the audio object.
audio.src = URL.createObjectURL(blob, { oneTimeOnly: true });
audio.play();
});
// The string to speak with SSML customizations.
string Ssml =
@"<speak version='1.0' " +
"xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'>" +
"Hello <prosody contour='(0%,+80Hz) (10%,+80%) (40%,+80Hz)'>World</prosody> " +
"<break time='500ms' />" +
"Goodbye <prosody rate='slow' contour='(0%,+20Hz) (10%,+30%) (40%,+10Hz)'>World</prosody>" +
"</speak>";
// The media object for controlling and playing audio.
MediaElement mediaElement = this.media;
// The object for controlling the speech-synthesis engine (voice).
var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
// Generate the audio stream from SSML.
SpeechSynthesisStream stream = await synth.synthesizeSsmlToStreamAsync(Ssml);
// Send the stream to the media object.
mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();
对后台任务管理的更新
[立即获取后台任务示例。]
Windows 8.1 为后台任务添加了几项新功能:
安静时间和后台任务
安静时间是 Windows 8.1 中的一项新功能,允许用户在不希望受到通知的干扰时,指定一天中的特定时间段。 此功能还会阻止大多数与 Windows 应用商店应用关联的后台活动,从而阻止用户的打扰并且可能延长设备的连接待机生存期。
当系统进入安静时间时,后台任务将排队并保持到安静时间结束。 当系统进入安静时间时,将取消当前运行的后台任务。
在安静时间结束时,允许后台任务开始备份。 在系统退出安静时间之前,每项后台任务以随机间隔重新开始。这可确保后台任务不会同时唤醒,否则将对系统资源和远程服务器资源带来不必要的负荷。系统将不触发通知,直到指定的安静时间结束。
默认情况下,安静时间允许两种例外:来自支持新锁屏呼叫功能的来电和用户在默认指定的闹钟应用中设置的闹钟。如果应用是支持锁屏呼叫的应用,而且 IncomingCall 设置被设定为 TRUE,那么将运行后台任务并且传递通知。在安静时间将传递由用户在默认指定的闹钟应用中设置的闹钟通知。
默认启用的安静时间是从午夜到早上 6 点,在此期间允许来电。 用户可以在更改电脑设置的应用部分中的通知选项卡上,更改这些设置或禁用安静时间。 安静时间在所有系统上都可用。
空闲任务的取消
除了后台任务资源约束,Windows 后台任务基础架构将检测空闲的或挂起的后台任务。如果后台任务在最小时间量(根据系统的状态而不同)内没有利用其最低 CPU 或网络资源,则被认为是空闲或挂起。如果检测到空闲或挂起的后台任务,将发送一条取消通知,以便任务停止工作并关闭。如果后台任务没有在 5 秒内停止工作并关闭,该应用将被认为无法响应,并且系统将终止该应用。
在 Windows 8.1 中,避免使你的应用因为空闲或挂起的后台任务而终止:始终关联一个取消处理程序,以便它被完全取消。请参阅如何处理空闲或挂起的后台任务中的详细信息和代码段。
后台任务的工作成本提示
Windows 8.1 对有关资源可用性的后台任务提供提示。当激活后台任务时,它可以使用此提示来决定要做的工作量。可以报告三种后台资源状态:低、中和高。若要了解详细信息,请参阅BackgroundWorkCost和BackgroundWorkCostValue。
用于后台任务的 PowerShell cmdlet
开发人员可以使用新的 AppBackgroundTask powershell 命令以及新的 BackgroundTasksManager cmdlet 设计器模块来检索有关运行后台任务的信息。在实现和调试后台任务时,这将非常有帮助。有关详细信息,请参阅 用于后台任务的 PowerShell cmdlet。
锁定屏幕上的警报应用支持
[立即获取警报通知示例。]
在 Windows 8.1 中,锁屏提醒条之一现在可用于警报应用。警报应用使用 AlarmApplicationManager 类向用户请求作为系统警报应用的权限。如果用户授予权限(或者如果用户使用控制面板将应用放入该警报提醒条),则应用占用该提醒条并成为系统警报应用。然后,系统警报应用引发的警报通知会在精确到一秒的时间内向用户显示。只有警报提醒条中的应用可启动警报通知;其他应用启动的警报通知将作为普通通知。
通过使用 commands 元素创建 Toast 通知来计划警报通知。你还可以使用 audio 元素来指定警报声音。它在通知启动时播放,即便系统静音,也可以播放声音。
工作项目计划更新
CoreDispatcher (Windows::UI::Core:CoreDispatcher) API 现在允许你更好地掌控工作项目计划的优先级。
在 Windows 8.1 中,工作调度优先级目前采用以下顺序:
- SendMessage(最高优先级)
- CoreDispatcherPriority.High
- CoreDispatcherPriority.Normal(包括窗口消息和组件对象模型 (COM) 调用)
- 任何设备输入消息
- CoreDispatcherPriority.Low
- CoreDispatcherPriority.Idle(最低优先级,用于后台任务)
若要更改任务优先级,请在 CoreDispatcher 类型上使用这些新成员:
CoreDispatcher::ShouldYield 方法(2 个重载)—查询指定(或更高)优先级的任务队列中存在项目时,调用程序是否应当让步。
CoreDispatcher::CurrentPriority 属性—获取或设置 CoreDispatcher 最近处理的任务的当前优先级。当应用正在处理特定优先级的工作,但又有一个优先级更高的工作加入时,请将此属性设置为提升当前任务的优先级,以便 ShouldYield 提供更准确的结果。