Windowsストアアプリ:タイルのスケジュール更新

日曜日 , 7, 10月 2012 Leave a comment

スケジュール更新の概要

 

 タイルの更新方法の一つスケジュール更新について解説します。

 スケジュール更新はアプリが起動していないタイミングで定期的に更新する仕組みではなく、アプリ起動時に「30分後に更新する」というタイミングを指定して更新する方法です。

 (タイルの概要についてはWindowsストアアプリ:タイルの概要を参考にしてください)

 

(スケジュール更新のポイント)

・設定はアプリ起動時(実行は指定時間後、アプリが終了していてもよい)

・サーバーとの通信は行わない

 

スケジュールを設定する

 

 タイルの更新のベースはWindowsストアアプリ:タイルの概要同様です。

 スケジュール更新を利用する場合はタイルを設定する際に、TileNotificationではなく、ScheduledTileNotificationクラスを利用します。

 ScheduledTileNotificationは第二引数に実行するタイミングを指定したDateTimeクラスを渡します。

 

            Int16 dueTimeInSeconds = 15;
            DateTime dueTime = DateTime.Now.AddSeconds(dueTimeInSeconds);

            ScheduledTileNotification tileNotification = new ScheduledTileNotification(tileXml,dueTime);
            tileNotification.Tag = this.tileText.Text;

            TileUpdateManager.CreateTileUpdaterForApplication().AddToSchedule(tileNotification);

 

 実行する全文は以下です。

 

            XmlDocument tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideImageAndText01);

            // キューに複数のタイル通知を設定可能にする
            //TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true);

            XmlNodeList tileTextAttributes = tileXml.GetElementsByTagName("text");
            tileTextAttributes[0].InnerText = this.tileText.Text;

            XmlNodeList tileImageAttributes = tileXml.GetElementsByTagName("image");
            ((XmlElement)tileImageAttributes[0]).SetAttribute("src", "ms-appx:///Assets/wideTile.png");
            ((XmlElement)tileImageAttributes[0]).SetAttribute("alt", "wideTile.png");

            XmlDocument squareTileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareText04);
            XmlNodeList squareTileTextAttributes = squareTileXml.GetElementsByTagName("text");
            squareTileTextAttributes[0].AppendChild(squareTileXml.CreateTextNode(this.tileText.Text));
            IXmlNode node = tileXml.ImportNode(squareTileXml.GetElementsByTagName("binding").Item(0), true);
            tileXml.GetElementsByTagName("visual").Item(0).AppendChild(node);

            Int16 dueTimeInSeconds = 15;
            DateTime dueTime = DateTime.Now.AddSeconds(dueTimeInSeconds);

            ScheduledTileNotification tileNotification = new ScheduledTileNotification(tileXml,dueTime);
            tileNotification.Tag = this.tileText.Text;

            TileUpdateManager.CreateTileUpdaterForApplication().AddToSchedule(tileNotification);

 

タイルの有効期間

 

 ライブタイルには有効期間を指定できます。

 指定しない場合の有効期間は3日です。

 

tileNotification.ExpirationTime = DateTimeOffset.UtcNow.AddSeconds(30);

 

 上記のように指定することでタイルの表示時間を30秒にします。

 (15秒後にスケジュールされたタイルの場合表示時間は15秒になります。)

 


Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です