NotificationsExtensions 本身是一個 Protable Classes Library 所開發的 Library,所以對於 Windows Phone 及 Windows Store 的支援性是一樣的,裡面大部份的 Function 在做的事是將傳入的圖片,字串等參數組成一段 XML 來建立或更新動態磚。
在 NotificationsExtensions 的官方文件中可以下載到包含 Source Code 的範例專案,打開專案中 TileContent.cs 這個檔案的最底部可以發現 TileContentFactory 是一個使用 Static Factory Pattern 開發的類別,其中有很多像 CreateTileSquare150x150Block 這樣子的靜態 Method,這些都是用來產生各式外型 Live Tile 的 Method,可以參考 The tile template catalog
在使用 NotificationsExtensions 更新 Live Tile 之前,首先當然要有已經釘到桌面上的 Tile,而查詢 Tile 是否已被釘上,可以使用列舉的方式,也可以直接使用 TileId 來查詢,方法如下
// 使用 foreach 從 tilelist 中找到已釘至桌面的合適 Tile
IReadOnlyList<SecondaryTile> tilelist = await Windows.UI.StartScreen.SecondaryTile.FindAllAsync();
// 或直接查詢要 Update 的 Tile 是否存在
SecondaryTile.Exists(Constants.TILE_ID)
而之所以要介紹這個 Library,利用以下兩種方式來更新 Tile 就可以明顯看出好處了
const String TILE_ID = "tile_id";
// 使用 NotificationsExtensions 更新動態磚
if (SecondaryTile.Exists(TILE_ID))
{
// 更新文字
ITileWide310x150Text04 tileContent = TileContentFactory.CreateTileWide310x150Text04();
tileContent.TextBodyWrap.Text = "Sent to a secondary tile from NotificationsExtensions!";
ITileSquare150x150Text04 squareContent = TileContentFactory.CreateTileSquare150x150Text04();
squareContent.TextBodyWrap.Text = "Sent to a secondary tile from NotificationExtensions!";
tileContent.Square150x150Content = squareContent;
TileUpdateManager.CreateTileUpdaterForSecondaryTile(TILE_ID).Update(tileContent.CreateNotification());
// 更新數字
BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(6);
BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(TILE_ID).Update(badgeContent.CreateNotification());
}
// 自行描述更新資訊
if (SecondaryTile.Exists(TILE_ID))
{
// 更新文字
string tileXmlString = "<tile>"
+ "<visual version='2'>"
+ "<binding template='TileWide310x150Text04' fallback='TileWideText04'>"
+ "<text id='1'>Send to a secondary tile from strings</text>"
+ "</binding>"
+ "<binding template='TileSquare150x150Text04' fallback='TileSquareText04'>"
+ "<text id='1'>Send to a secondary tile from strings</text>"
+ "</binding>"
+ "</visual>"
+ "</tile>";
XmlDocument tileDOM = new XmlDocument();
tileDOM.LoadXml(tileXmlString);
TileNotification tile = new TileNotification(tileDOM);
TileUpdateManager.CreateTileUpdaterForSecondaryTile(TILE_ID).Update(tile);
// 更新數字
string badgeXmlString = "<badge value='9'/>";
XmlDocument badgeDOM = new XmlDocument();
badgeDOM.LoadXml(badgeXmlString);
BadgeNotification badge = new BadgeNotification(badgeDOM);
BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(TILE_ID).Update(badge);
}
沒有留言:
張貼留言