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 中,您是透過在應用程式資訊清單中指定寬形磚資產,選擇讓您的應用程式支援寬形磚。在 Windows 8.1 中,您是透過在資訊清單中指定大型磚資產,選擇支援大型 (Square310x310) 磚。
注意 您的應用程式必須也能支援寬形磚,才能夠支援大型磚。
所有應用程式均支援中型 (Square150x150) 與小型 (Square70x70) 磚。同樣的,您可在資訊清單中提供小型磚資產。如果您的應用程式未提供小型磚影像 (透過縮放比例或提供個別的資產),Windows 8.1 會自動縮小您的中型磚影像。
如同在 Windows 8 中一樣,針對您支援的每種磚大小,我們建議您為四種縮放倍數 (0.8x、1x、1.4x 及 1.8x) 提供個別的資產。這可確保您的磚看來始終清爽,沒有縮放比例變形的情況。此外,為了更好的協助工具支援,您可以為高對比佈景主題提供影像資產。
顯示不同磚大小的應用程式名稱
在 Windows 8 中,您使用應用程式資訊清單來指定哪些磚大小顯示您的應用程式名稱。在 Windows 8.1 中的方式仍然不變,但有一個新格式。而且,請注意,您無法在小型 (Square70x70) 磚大小上顯示應用程式名稱。
宣告預設的釘選大小
在 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 系統上接收通知,您的通知承載便可指定 Windows 8.1 範本與 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 中不做任何變更也可順利運作,但它們無法使用大型磚大小。
注意 包含在您承載中的任何大型 (Square310x310) 磚範本,都必須是列出的最後一個繫結。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 引進新的搜尋方塊控制項,協助您提供搜尋結果:Windows.UI.Xaml.Controls.SearchBox (適用於使用 XAML 的應用程式) 與 WinJS.UI.SearchBox (適用於使用 JavaScript 的應用程式)。
您的應用程式現在可在您的標記中包含搜尋方塊,以做為元素。新的控制項支援完整範本化與設定樣式。
在 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 格式並非獨佔專用的。WebLink 會連結至網路上的內容,ApplicationLink 會連結至應用程式中的內容。例如,新聞閱讀程式可能同時擁有這兩種格式的內容,以 URI 帶領使用者回到應用程式中的文章,或帶領使用者前往網站上的同一篇文章。目標應用程式會選擇如何處理 URI。例如,郵件應用程式可能會使用 WebLink 格式,因為連結可傳送至網際網路,並從非 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 指定的應用程式時,目標應用程式便可提供遞補體驗。
套件系列名稱是應用程式套件的唯一識別碼。當來源應用程式將此識別碼提供給目標應用程式時,目標應用程式可透過以提供的 ApplicationLink 呼叫 LaunchUriAsync 方法,提供遞補體驗。如果 URI 的配置未處理 (例如,因為使用者解除安裝應用程式),或如果 URI 漫遊到另一個未安裝應用程式的裝置,對話方塊會告知使用者查看 Windows 市集中的應用程式。使用者預設會移至市集,而非需要的應用程式。如果您在傳送至 LaunchUriAsync 的 LauncherOptions 物件中包含套件系列名稱,系統會提示使用者安裝特定的應用程式,並使他們移至市集中該應用程式的清單頁面。
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,可支援 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 元素建立快顯通知。使用 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 可以提供更準確的結果。