先日 タイル更新の記事をアップしたとき @biac さんから NotificationsExtensions なるものを教えて頂きました。
@kazuakix 次はNotificationExtensionを使ってXML操作を楽にしましょうf(^^; http://t.co/IrhWgzZztK
— 山本康彦@BluewaterSoft (@biac) 2014, 10月 6
確かに、昨日までのコードは画像やテキストによって値のセット方法が違っていたりしてあまりスマートなものではありませんでした。
var tileXml = TileUpdateManager.GetTemplateContent( TileTemplateType.TileSquare150x150PeekImageAndText01); // 画像 var imageElement = tileXml.GetElementsByTagName("image").Single(); imageElement.Attributes.GetNamedItem("src").NodeValue = "ms-appx:///Assets/od_tile.png"; // テキスト tileXml.GetElementsByTagName("text")[0].InnerText = "100MB"; var updater = TileUpdateManager.CreateTileUpdaterForApplication(); updater.Update(new TileNotification(tileXml));
NotificationsExtensions を利用してコードを見やすく直していきましょう。
NotificationsExtensions を使う
導入
教えて頂いたページを参考に NotificationsExtensions を導入します。いつもなら NuGet から取ってくるのですが なぜか登録されていないので、コードサンプルからダウンロードします。
ダウンロードしたサンプルソリューションのうち、NotificationsExtensions フォルダを自分のプロジェクトにコピーしてソリューションに NotificationsExtensions.csprj を追加しましょう。
後は Windows Phone プロジェクトの参照設定に NotificationsExtensions プロジェクトを追加するだけで使えるようになります。
(追記) 普通に NuGet から導入できました。
使ってみる
今まで TileUpdateManager.GetTemplateContent でテンプレートの XML を作っていた部分を NotificationsExtensions.TileContent.TileContentFactory に置き換えます。
あとはメンバに値をセットしていって、最後に CreateNotification したものを TileUpdateManager に渡してやるだけ。
var tile = NotificationsExtensions.TileContent .TileContentFactory.CreateTileSquare150x150PeekImageAndText01(); // 画像 tile.Image.Src = "ms-appx:///Assets/od_tile.png"; // テキスト tile.TextBody1.Text = "1000MB"; var updater = TileUpdateManager.CreateTileUpdaterForApplication(); updater.Update(tile.CreateNotification());
かなりスッキリしたコードになりましたね。
実行すると、こんな感じでちゃんと動作しています。