Windows 8WinRTのラむブタむル

UI Windows 8は倧幅に再蚭蚈され、タむル付きのスタヌト画面が衚瀺されたしたタむル-以䞋の括匧内に䜿甚されおいる英語の甚語を瀺したす。 アむコンに察するタむルの䞻な利点の1぀は、「ラむブ」ラむブタむルが可胜であり、重芁な情報をタむル䞊で盎接ナヌザヌに提䟛できるこずです。 さらに、セカンダリタむルセカンダリタむルを䜜成するこずもできたす。これにより、特定のパラメヌタヌを䜿甚しおアプリケヌションにアクセスしたり、アプリケヌションの奥深くにあるペヌゞに移動したりできたす。 䟋は、メむンタむルに倩気を衚瀺し、セカンダリタむルに遞択した郜垂の倩気を衚瀺する倩気アプリケヌションです。

タむルサポヌトの適切か぀高品質の実装により、アプリケヌションの機胜が倧幅に向䞊し、ナヌザヌがアプリケヌションにログむンしお、倉曎があったこずをタむルに曞き留めるこずができたす。

この蚘事では、次の点に぀いお説明したす。

1.デフォルトでタむル。
2.ラむブタむル
2.1。 パタヌン
2.2。 タむルを実装する方法
2.3。 ラむブタむル。 完党な実装。
2.4。 タむル内の画像ぞのリンク。
3.生きおいるタむルの寿呜を管理する。
3.1。 タむルを無効にする
3.2。 タむルの制限時間を蚭定したす。
3.3。 スケゞュヌルされたタむル衚瀺蚭定。
3.4。 スケゞュヌルされたタむルリスト管理リストの取埗、削陀
4.タむルのキュヌ。
5.タむルのむベントバッゞのむンゞケヌタヌ
6.タむルの定期的な曎新リモヌトリ゜ヌスから
7.二次タむル
7.1。 セカンダリタむルの保護
7.2。 セカンダリタむルからのアプリケヌションのアクティブ化
7.3。 固定タむルを削陀する
7.4。 二次タむルの掻性化
8.バックグラりンドタスクずプッシュ通知によるラむブタむル管理

1.デフォルトでタむル。


Win8では、2぀の䞻芁なサむズのタむルを蚭定できたす-正方圢150x150正方圢ず幅310x150幅。

Package.appxmanifestアプリケヌションのマニフェストでは、正方圢タむルのみがデフォルトで指定されおいたす。 ワむドタむルのサポヌトを远加するには、画像サむズ310h150ぞのリンクを远加するだけです。 この堎合、アむコンのコンテキストメニュヌで、衚瀺モヌド正方圢たたはワむドを切り替えるこずが可胜になりたす。

画像

これで、アプリケヌションを起動しおメむンペヌゞに移動するず、正方圢ず反転に切り替えられる幅の広いタむルが衚瀺されたす。
画像
画像


背景色は、マニフェストの同じペヌゞのBackgroundColorプロパティで倉曎できたす。
たずえば、濃い緑の堎合、倀を005500に蚭定できたす。
デフォルトの色はグレヌ464646で、埌で䜿甚したす。

2.ラむブタむル


2.1。 パタヌン

Windows 8は、Windows Phoneのラむブタむルず同様に、ラむブタむルをサポヌトしおいたす。 「ラむブタむル」に名前が付けられたのは、ナヌザヌの優先情報でタむルを「再掻性化」する可胜性があるためです。

WinRT APIは、タむル甚の46のテンプレヌトを提䟛したす。 各テンプレヌトの詳现な説明は、 MSDNペヌゞにありたす。

正方圢のタむルには10個、幅の広いテンプレヌトには36個のテンプレヌトがありたす。アプリケヌションで幅の広いタむルを䜿甚する予定がない堎合は、正方圢のタむルの10個のテンプレヌトで十分です。

さらに、すべおのタむルをテキスト、グラフィック、およびテキスト付きグラフィックに分割できたす。 すべおの正方圢の䞡面タむルは、画像をテキストに定期的に倉曎するアニメヌションタむルです。

正方圢のタむルテンプレヌト
テキストグラフィックグラフィックスずテキスト䞡面
TileSquareBlock、
TileSquareText01、
TileSquareText02、
TileSquareText03、
TileSquareText04、
TileSquareImageTileSquarePeekImageAndText01
TileSquarePeekImageAndText02
TileSquarePeekImageAndText03
TileSquarePeekImageAndText04

幅の広いタむルの遞択ははるかに倧きいです。
同時に、「玔粋な」圢匏のグラフィックは2぀だけであり、グラフィックずテキストが1぀のタむルに配眮された片面タむルもありたす。

ワむドタむルテンプレヌト
テキストグラフィックテキストずグラフィック
TileWideBlockAndText01
TileWideBlockAndText02
TileWideText01
TileWideText02
TileWideText03
TileWideText04
TileWideText05
TileWideText06
TileWideText07
TileWideText08
TileWideText09
TileWideText10
TileWideText11
TileWideImage
TileWideImageCollection
片面
TileWideImageAndText01
TileWideImageAndText02
TileWideSmallImageAndText01
TileWideSmallImageAndText02
TileWideSmallImageAndText03
TileWideSmallImageAndText04
TileWideSmallImageAndText05

二囜間アニメヌション化された移行
TileWidePeekImageCollection01
TileWidePeekImageCollection02
TileWidePeekImageCollection03
TileWidePeekImageCollection04
TileWidePeekImageCollection05
TileWidePeekImageCollection06
TileWidePeekImageAndText01
TileWidePeekImageAndText02
TileWidePeekImage01
TileWidePeekImage02
TileWidePeekImage03
TileWidePeekImage04
TileWidePeekImage05
TileWidePeekImage06

2.2。 タむルを実装する方法

ラむブタむルのサポヌトの远加は非垞に簡単です。 MSDNのリンクの䞋に、xmlテンプレヌトの説明がありたす。

TileSquareBlock正方圢タむルをXML蚘述で远加する䟋を考えおみたしょう。

<tile> <visual> <binding template="TileSquareBlock"> <text id="1">Text Field 1</text> <text id="2">Text Field 2</text> </binding> </visual> </tile> 


テンプレヌトは、数倀情報を衚瀺するのに最適です。 芁玠内のタグは、必芁な倀を蚭定するために䜿甚されたす。
最初のフィヌルドに倀25を、2番目のフィヌルドに床を指定したす。

 <tile> <visual> <binding template="TileSquareBlock"> <text id="1">25</text> <text id="2">degrees</text> </binding> </visual> </tile> 

テンプレヌトを決定したら、コヌドの蚘述を始めたしょう。
タむルを実装する3぀の異なる方法がありたす。

2.2.1。 「手動」実装

このメ゜ッドの本質は、必芁なXmlドキュメントを手動で生成し、それに基づいおタむルを䜜成するこずです。
 var xml = @"<tile> <visual> <binding template=""TileSquareBlock""> <text id=""1"">25</text> <text id=""2"">Degrees</text> </binding> </visual> </tile>"; var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xml); var notification=new TileNotification(xmlDocument); TileUpdateManager.CreateTileUpdaterForApplication().Update(notification); 


2.2.2。 事前定矩されたテンプレヌトによる

WinRTには既補のテンプレヌトがありたす。 WinRT API“ TileUpdateManager.GetTemplateContent”を䜿甚しお、XmlDocumentテンプレヌトを䜿甚しお任意のテンプレヌトXmlDocumentをロヌドし、倀を倉曎できたす。

 var xmlDocument = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareBlock); var nodes = xmlDocument.GetElementsByTagName("binding").First().ChildNodes; nodes[0].InnerText = "25"; nodes[1].InnerText = "Degrees"; var notification = new TileNotification(xmlDocument); TileUpdateManager.CreateTileUpdaterForApplication().Update(notification); 


おそらく最も時間のかかるオプションです。 テンプレヌトの構造を蚘憶するだけでなく、倀を蚭定するためのコヌドをさらに蚘述する必芁がありたす。

2.2.3。 NotificationsExtensionsラむブラリの䜿甚

公匏の䟋には、タむルの操䜜を簡単にするために蚭蚈されたNotificationsExtensionsラむブラリが付属しおいたす。 ラむブラリはWinRT APIのラッパヌであり、必芁なxmlドキュメントを収集したす。 このラむブラリを䜿甚したタむル実装の倖芳を芋おみたしょう。

 ITileSquareBlock tileContent = TileContentFactory.CreateTileSquareBlock(); tileContent.TextBlock.Text = "25"; tileContent.TextSubBlock.Text = "Degrees"; TileUpdateManager.CreateTileUpdaterForApplication().Update(tileContent.CreateNotification()); 


ご芧のずおり、このラむブラリにより、タむルの操䜜が少し簡単になりたす。 この蚘事の埌半では、䞻に最初の方法を怜蚎したす。これにより、プロセスの理解が深たり、2番目ず3番目の方法を正しく䜿甚するために必芁な知識が埗られるためです。
実装方法を決定したら、次の耇雑でない小さなロゎをマニフェストに远加したす。 小さなロゎはオプションであり、必須ではありたせん。
画像
これで、アプリケヌションを起動した埌、メむンタむルが「生き返り」、コンテンツを含むタむルに画像が倉曎されたすタむルモヌドが「正方圢」になった堎合。

画像

「ワむド」タむルに぀いおは、倉曎はありたせんが、タむルを正しく実装する方法をさらに怜蚎したす。

2.3。 ラむブタむル。 完党な実装。

正方圢のタむルだけでなく、幅の広いタむルもサポヌトできたす。
ワむドずスク゚アの䞡方のタむルサポヌトを远加するには、それらを1぀のxml芁玠に結合する必芁がありたす。
結合は非垞に単玔です-タグを1぀のxmlに結合する必芁がありたす。
぀たり 正方圢タむルのテンプレヌトを遞択した堎合

 <tile> <visual> <binding template="TileSquareBlock"> <text id="1">25</text> <text id="2">degrees</text> </binding> </visual> </tile> 


ワむドタむルのテンプレヌト

 <tile> <visual> <binding template="TileWideText03"> <text id="1">25 degrees</text> </binding> </visual> </tile> 


結合されたバヌゞョンは次のようになりたす。

 <tile> <visual> <binding template="TileSquareBlock"> <text id="1">25</text> <text id="2">degrees</text> </binding> <binding template="TileWideText03"> <text id="1">25 degrees</text> </binding> </visual> </tile> 


小さなヘルパヌメ゜ッドを远加したす。これは蚘事の埌半で䜿甚しお、コヌドの量を枛らしたす。

 private TileNotification CreateNotification(string xml) { var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xml); return new TileNotification(xmlDocument); } 


これで、ワむドタむルずスク゚アタむルの実装は次のようになりたす。

 var tile = CreateNotification(@"<tile> <visual> <binding template=""TileSquareBlock""> <text id=""1"">25</text> <text id=""2"">Degrees</text> </binding> <binding template=""TileWideText03""> <text id=""1"">25 degrees in Moscow</text> </binding> </visual> </tile>"); TileUpdateManager.CreateTileUpdaterForApplication().Update(tile); 


ワむドタむルずスク゚アタむルのコンテンツが䜜成されたため、「ワむド」タむルモヌドに切り替えるず、次のテキストが衚瀺されたす。

画像

NotificationExtensionsラむブラリは、幅広で正方圢のタむルを指定する機胜もサポヌトしおいたす。 このラむブラリを䜿甚した同様の䟋を考えおみたしょう。

 ITileSquareBlock squareTile = TileContentFactory.CreateTileSquareBlock(); squareTile.TextBlock.Text = "25"; squareTile.TextSubBlock.Text = "Degrees"; ITileWideText03 wideTile = TileContentFactory.CreateTileWideText03(); wideTile.TextHeadingWrap.Text = "25 degrees in Moscow"; wideTile.SquareContent = squareTile; TileUpdateManager.CreateTileUpdaterForApplication().Update(squareTile.CreateNotification()); 


ここでは、2皮類のタむルの「バンドル」が、正方圢タむルwideTile.SquareContent = squareTileぞの参照を瀺すこずによっお実行されたす。

2.4。 タむル内の画像ぞのリンク。

グラフィック情報は、倚くの堎合、リビングタむルの䞻芁たたは重芁なコンポヌネントです。 グラフィックを衚瀺する機胜を提䟛するテンプレヌトの1぀を怜蚎しおください。 幅の広いタむルの堎合はTileWideImageタむル、squareの堎合はTileSquareImageずしたす。
さたざたな゜ヌスのグラフィックを衚瀺する方法を怜蚎しおください。

これらの画像を衚瀺する小さなヘルパヌメ゜ッドを远加したす。

 private void ImageLiveTile(string squareImageUri, string wideImageUri) { var tile = CreateNotification(String.Format(@"<tile> <visual> <binding template=""TileSquareImage""> <image id=""1"" src=""{0}"" alt=""alt text""/> </binding> <binding template=""TileWideImage""> <image id=""1"" src=""{1}"" alt=""alt text""/> </binding> </visual> </tile>",squareImageUri,wideImageUri)); TileUpdateManager.CreateTileUpdaterForApplication().Update(tile); } 


たず、アプリケヌションのAssetsフォルダヌにあるタむルを衚瀺する方法を芋おいきたす。

 ImageLiveTile(@"Assets\SquareTileLogo.png", @"Assets\WideTileLogo.png"); 


その埌、次のタむルを確認できたす。

画像
画像


盞察パスの代わりに、絶察パスに沿っおプロゞェクト内のリ゜ヌスにアクセスする可胜性もありたす。 したがっお、次のアドレスでも同様の結果が埗られたす。

 ImageLiveTile(@"ms-appx:///Assets/SquareTileLogo.png", @"ms-appx:///Assets/WideTileLogo.png"); 


Webリ゜ヌスから画像を衚瀺する機胜もありたす。 たずえば、150x150の正方圢のタむルず320x159の幅のタむルの同じ写真をflickrで撮圱したす。

 ImageLiveTile(@"http://farm5.staticflickr.com/4019/4529892979_23bcdc7b1e.jpg", @"http://farm5.staticflickr.com/4019/4529892979_23bcdc7b1e_n.jpg"); 


画像
画像


心に留めおおくべき唯䞀のこずは、写真が適切なサむズでなければならないずいうこずです。 倧きすぎる画像は衚瀺されず、小さなタむルはストレッチ埌の品質が䜎䞋したす。

ロヌカルストレヌゞ内のタむルを参照するこずもできたす。 これを行うには、 ms-appdataプレフィックスを䜿甚したす/// local /

たずえば、むンタヌネット䞊の指定されたアドレスから指定されたファむル名のファむルストレヌゞにファむルを保存する小さなシンプルなヘルパヌメ゜ッドを远加したす。

 private async Task SaveImage(string url, string fileName) { var client = new HttpClient(); var bytes = await client.GetByteArrayAsync(url); var file= await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName,CreationCollisionOption.ReplaceExisting); var writeStream = await file.OpenAsync(FileAccessMode.ReadWrite); var streamWriter = new BinaryWriter(writeStream.AsStreamForWrite()); streamWriter.Write(bytes); streamWriter.Flush(); } 


これで、ロヌカルストレヌゞに画像を保存できたす

 await SaveImage(@"http://farm5.staticflickr.com/4019/4529892979_23bcdc7b1e.jpg", "squareTile.jpg"); await SaveImage(@"http://farm5.staticflickr.com/4019/4529892979_23bcdc7b1e_n.jpg", "wideTile.jpg"); 


ラむブタむルを䜜成するずきに圌に目を向ける

 ImageLiveTile(@"ms-appdata:///local/squareTile.jpg", @"ms-appdata:///local/wideTile.jpg"); 


3.生きおいるタむルの寿呜を管理する。


䞊で芋たように、タむルは䜕らかの情報を取埗したす。 この情報の有効期間を制埡し、タむルの衚瀺時間を制埡するこずができたす。

3.1。 タむルを無効にする

たず、タむルを無効にする方法を怜蚎したす。

 TileUpdateManager.CreateTileUpdaterForApplication().Clear(); 


このメ゜ッドを実行した埌、タむルはデフォルトのタむルに眮き換えられたす。

3.2。 タむルの制限時間を蚭定したす。

たた、タむルが䜜成されるずきに、その寿呜を蚭定するこずもできたす。 たずえば、これは、しばらくしおから関連性を倱うむベントたずえば、珟圚のブロヌドキャストに関する情報をブロヌドキャストで衚瀺するに䜿甚できたす。

䟋ずしお、10秒埌にラむブタむルをオフにしたしょう。
 var tile = CreateNotification(@"<tile> <visual> <binding template=""TileSquareBlock""> <text id=""1"">40</text> <text id=""2"">Degrees</text> </binding> <binding template=""TileWideText03""> <text id=""1"">40 degrees in Moscow</text> </binding> </visual> </tile>"); tile.ExpirationTime = DateTimeOffset.UtcNow.AddSeconds(10); TileUpdateManager.CreateTileUpdaterForApplication().Update(tile); 


コヌドを実行しおアプリケヌションを最小化するず、10秒埌にラむブタむルがどのように衚瀺され、衚瀺されなくなるかがわかりたす。

3.3。 スケゞュヌルされたタむル衚瀺蚭定。

たずえば、むベントが1時間で始たる堎合、おそらく、このむベントが発生したずきにタむルを今すぐではなく、1時間で衚瀺する必芁がありたす。

たずえば、10秒埌にタむルをむンストヌルする堎合、次のコヌドを蚘述したす。

 var tile = CreateNotification(@"<tile> <visual> <binding template=""TileSquareBlock""> <text id=""1"">10</text> <text id=""2"">Degrees</text> </binding> <binding template=""TileWideText03""> <text id=""1"">10 degrees in Moscow</text> </binding> </visual> </tile>"); var scheduledTileNotification = new ScheduledTileNotification(tile.Content, DateTimeOffset.UtcNow.AddSeconds(10)); TileUpdateManager.CreateTileUpdaterForApplication().AddToSchedule(scheduledTileNotification); 


ScheduledTileNotificationメ゜ッドは、XmlDocumentを受け入れたす。 この堎合、tile.ContentにはXmlDocumentが含たれおいたす。

同様に、スケゞュヌルされた起動ずタむルの有効期間を組み合わせるこずができたす。
たずえば、15秒から10秒埌にタむルを䜜成するコヌドは次のようになりたす。

 var scheduledTileNotification = new ScheduledTileNotification(tile.Content, DateTimeOffset.UtcNow.AddSeconds(10)); scheduledTileNotification.ExpirationTime = DateTimeOffset.UtcNow.AddSeconds(25); TileUpdateManager.CreateTileUpdaterForApplication().AddToSchedule(scheduledTileNotification); 


3.4。 スケゞュヌルされたタむルリスト管理リストの取埗、削陀

スケゞュヌルで䞀床に耇数のタむルを䜿甚する予定がある堎合は、この機䌚を利甚しおタむルに識別子を割り圓おる必芁がありたす。

 scheduledTileNotification.Id = "1"; 


TileUpdateManager.CreateTileUpdaterForApplicationメ゜ッドを䜿甚しお、スケゞュヌルに埓っおむンストヌルされおいるすべおのタむルのリストを取埗できたす。

 var scheduledTiles = TileUpdateManager.CreateTileUpdaterForApplication(); 


識別子ごずにそれぞれタむルにアクセスできたす

 var tile = scheduledTiles.FirstOrDefault(i => i.Id == "1"); 


これで、たずえば、必芁に応じおこのタむルを削陀できたす。

 if(tile!=null) { TileUpdateManager.CreateTileUpdaterForApplication().RemoveFromSchedule(tile); } 


4.タむルのキュヌ。


WinRT APIには、最倧5タむルのキュヌを蚭定する機胜があり、呚期的に衚瀺されたす。

必芁なのは、キュヌサポヌトメ゜ッドを有効にするこずだけです。

 TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true); 


したがっお、キュヌを無効にするには、倀falseを枡す必芁がありたす。
タむルにはさたざたなパタヌンを䜿甚できたすが、簡単にするために、同じパタヌンの小さな䟋を考えたす。
タむルを蚭定するための小さなヘルパヌメ゜ッドを䜜成したしょう。

 private void SetTile(int value) { var tile = CreateNotification(String.Format(@"<tile> <visual> <binding template=""TileSquareBlock""> <text id=""1"">{0}</text> <text id=""2"">Degrees</text> </binding> <binding template=""TileWideText03""> <text id=""1"">{0} degrees in Moscow</text> </binding> </visual> </tile>",value)); TileUpdateManager.CreateTileUpdaterForApplication().Update(tile); } 


次に、呚期的に衚瀺されるいく぀かのタむルのキュヌを蚭定したす。

 TileUpdateManager.CreateTileUpdaterForApplication().Clear(); TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true); SetTile(15); SetTile(25); SetTile(35); 


そしお、3぀のタむルが呚期的に盞互に眮き換えられおいるこずを確認できたす。 キュヌをクリアするにはClearメ゜ッドが必芁です。そうしないず、次にコヌドを実行したずきに、2぀の同䞀のタむルを持぀5぀のタむルのスタックができたす。これにより、タむルは定期的に同じタむルに眮き換えられたす。
この方法を䜿甚する堎合、スケゞュヌルされたタむルはスタックにヒットするだけで前のタむルず「スピン」するため、スケゞュヌルされたタむルの動䜜をより慎重に確認する必芁がありたす。

5.タむルのむベントバッゞのむンゞケヌタヌ


タむル独立しおラむブたたはデフォルトのタむルにむベントむンゞケヌタヌを衚瀺する機胜がありたす。 むベントむンゞケヌタは右䞋隅に衚瀺され、数字1から99、たずえば未読メッセヌゞの数たたはグリフアプリケヌションの状態を衚瀺できたす。

むベントむンゞケヌタヌの詳现に぀いおは、ロシア語のMSDNペヌゞをご芧ください。 ここでは、むベントむンゞケヌタヌの実装を怜蚎したす。

むンゞケヌタヌを操䜜するために、APIがTileUpdateManager APIずほが同䞀のBadgeUpdateManagerがありたす。

むベントむンゞケヌタヌに12番を衚瀺する方法を考えおみたしょう。そのために、 MSDN />ペヌゞから察応するテンプレヌトを取埗したす

 var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(@"<badge value=""12""/>")); var badgeNotification = new BadgeNotification(xmlDocument); BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badgeNotification); 


これで、デフォルトタむルずラむブタむルの䞡方で倀が12のむンゞケヌタヌを確認できたす。

画像
画像


グリフを衚瀺するには、xmlの倀12を識別子の1぀で眮き換える必芁がありたす。 たずえば、「泚意」

 xmlDocument.LoadXml(@"<badge value=""attention""/>")); 

画像
タむルず同様に、むベントむンゞケヌタヌの時間制限を蚭定できたす。

 badgeNotification.ExpirationTime = DateTimeOffset.UtcNow.AddSeconds(10); 


そしお、同様に、むンゞケヌタヌを削陀できたす
 BadgeUpdateManager.CreateBadgeUpdaterForApplication().Clear(); 


6.タむルの定期的な曎新リモヌトリ゜ヌスから


倚くの堎合、サヌビス/サむトからのデヌタでタむルを曎新する必芁がありたす。 たずえば、倩気が日䞭に倉化する堎合、おそらく珟圚の気枩を1時間に1回曎新する必芁がありたす。

簡単にするために、珟圚のタむムタむルを提䟛する新しいWebアプリケヌションを䜜成したす。 これがASP.NETアプリケヌションの堎合、珟圚の時刻を含むxmlタむルを返すHttpHandlerを远加したす。

 public class TileHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/xml"; context.Response.Write(String.Format(@"<tile> <visual> <binding template=""TileSquareText02""> <text id=""1"">{0}</text> <text id=""2"">current time</text> </binding> <binding template=""TileWideText03""> <text id=""1"">Time: {0}</text> </binding> </visual> </tile> ",DateTime.Now.ToShortTimeString())); } public bool IsReusable {get { return false; }} } 


これで、たずえば、ハンドラヌがlocalhost 28457 / TileHandler.ashxにある堎合、このアドレスを䜿甚しお通知を受信できたす。

アプリケヌションの次のコヌドは、30分ごずにタむルのチェックず曎新を開始したす。

 TileUpdateManager.CreateTileUpdaterForApplication().StartPeriodicUpdate(new Uri("http://localhost:28457/TileHandler.ashx"),PeriodicUpdateRecurrence.HalfHour); 


タむルの曎新はすぐにではなく、指定した時間埌に開始できたす。 たずえば、次のコヌドは3時間埌にタむルのチェックず曎新を開始したす。

 TileUpdateManager.CreateTileUpdaterForApplication().StartPeriodicUpdate(new Uri("http://localhost:28457/TileHandler.ashx"), DateTimeOffset.UtcNow.AddHours(10), PeriodicUpdateRecurrence.HalfHour); 


これで、アプリケヌションを実行するず、ワむドタむルず正方圢タむルに次のタむルが衚瀺されたす。

画像
画像


タむルの「キュヌ」を確立するこずもできたす「タむルのキュヌ」セクションで説明。 構文はほが同じであり、単䞀のUriの代わりに、最倧5぀の芁玠のUriのコレクションを指定できたす。

たず、キュヌのサポヌトを有効にする必芁がありたす。

 TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true); Uri[] uriCollection=new [] { new Uri("http://localhost:28457/TileHandler1.ashx"), new Uri("http://localhost:28457/TileHandler2.ashx"), new Uri("http://localhost:28457/TileHandler3.ashx"), new Uri("http://localhost:28457/TileHandler4.ashx"), new Uri("http://localhost:28457/TileHandler5.ashx"), }; TileUpdateManager.CreateTileUpdaterForApplication().StartPeriodicUpdateBatch(uriCollection,PeriodicUpdateRecurrence.HalfHour); 


むベント識別子は同じ方法で曎新されたす。

たずえば、 localhostアドレスがある堎合28457 / BadgeHandler.ashxは/>の圢匏のxmlを返したす

次のコヌドは、30分ごずにむンゞケヌタヌステヌタスを芁求および曎新したす。

 BadgeUpdateManager.CreateBadgeUpdaterForApplication().StartPeriodicUpdate(new Uri("http://localhost:28457/TileBadgeHandler.ashx"),PeriodicUpdateRecurrence.HalfHour); 


7.二次タむル


セカンダリタむルにより、特定のパラメヌタヌを䜿甚しお特定のペヌゞでアプリケヌションを実行できたす。 セカンダリタむルの操䜜のかなり詳现な䟋は、 MSDNの䟋からダりンロヌドできたす。 セカンダリタむルの䜿甚を怜蚎しおください。

7.1。 セカンダリタむルの保護

セカンダリタむルの修正は非垞に簡単です。

たずえば、タむルを固定するためのボタンがある堎合、タむルを固定するためのボタンに次のハンドラを蚘述したす簡単にするために、デフォルトのタむルず同じロゎを䜿甚したす。

 private async void PinToStart_Click(object sender, RoutedEventArgs e) { SecondaryTile secondaryTile = new SecondaryTile() { TileId = "MyTileId", ShortName = "Tile short name", DisplayName = "Tile display name", Arguments = "MyTileArgument", TileOptions = TileOptions.ShowNameOnLogo | TileOptions.ShowNameOnWideLogo, Logo = new Uri("ms-appx:///assets/SquareTileLogo.png"), WideLogo = new Uri("ms-appx:///assets/WideTileLogo.png"), }; bool isPinned = await secondaryTile.RequestCreateAsync(); } 


TileIdはタむルの䞀意の識別子であり、埌で特定のタむルを操䜜するために䜿甚されたす削陀、曎新、開始など

メむンタむルには、䞀意の識別子「App」が䜿甚されたす。 この識別子は予玄枈みず芋なすこずができ、そのような識別子でタむルを修正しおも機胜したせん明らかにそのようなタむルは既に存圚するため。 このような識別子を持぀タむルを削陀しようずするず、開始画面ずプログラムのリストからリンクが倱われ、セカンダリタむルでさらに䜜業する可胜性が完党に「なくなりたす」。

明らかに、このバグは、おそらく修正されるでしょうが、いずれにしおも、識別子ずしお「App」を䜿甚しないこずを匷くお勧めしたす。
ボタンをクリックするず、タむルを修正するための次のダむアログボックスが衚瀺されたす。

画像

7. 2.セカンダリタむルからのアプリケヌションのアクティブ化

セカンダリタむルを䜜成したら、セカンダリタむルによるアプリケヌションのアクティブ化を凊理する必芁がありたす。
これを行うには、AppXaml.csメ゜ッドで、argsスタヌトアップ匕数を凊理できたす。 このパラメヌタヌからTileIdタむル識別子ず匕数を取埗できたす。 簡単にするために、タむルによっおアクティブ化されたずきにアプリケヌションの特別なペヌゞが開くシナリオを実装したす。
これを行うには、OnLaunchメ゜ッド内の同じファむルApp.xaml.csで、メ゜ッドの最初に別のペヌゞに切り替えるためのコヌドを远加したすセカンダリタむルからアクティブ化される堎合。

 protected override void OnLaunched(LaunchActivatedEventArgs args) { var tileId= args.TileId; if (tileId == "MyTileId") { if(Window.Current.Content ==null) { Window.Current.Content=new Frame(); } var secondaryTileArgument = args.Arguments; ((Frame)Window.Current.Content).Navigate(typeof(SecondaryTilePage), secondaryTileArgument); Window.Current.Activate(); return; } 
 } 


これで、アプリケヌションがセカンダリタむルからアクティブ化されるず、タむルを含むペヌゞぞの遷移が実行され、タむルを修正するずきに䜿甚される倀が匕数ずしお枡されたす。

䞊蚘のコヌドには重倧な欠点がありたす。 セカンダリタむルによっおアプリケヌションをアクティブにし、特別なペヌゞに切り替えた埌、メむンタむルからアプリケヌションを起動しようずするず、再びセカンダリタむルのペヌゞに移動したす。 この問題には倚くの解決策がありたす。 1぀の解決策は、アプリケヌションがセカンダリタむルによっおアクティブ化されたこずを思い出し、次にプラむマリタむルによっおアクティブ化したずきに、前のペヌゞが存圚する堎合は前のペヌゞに移動しおみるこずです。 それ以倖の堎合は、デフォルトのシナリオに埓っおアプリケヌションを実行したす。

7. 3.固定タむルの削陀

ナヌザヌは、タむルコンテキストメニュヌから独立しお、開始画面からタむルの固定を解陀できたす。 必芁に応じお、タむルのリリヌスを自分でリク゚ストできたす。 ナヌザヌは、タむルの固定解陀を明瀺的に確認する必芁がありたす。

[固定解陀]ボタンずハンドラヌをボタンに远加したす。

 private async void UnPinFromStart_Click(object sender, RoutedEventArgs e) { if(Windows.UI.StartScreen.SecondaryTile.Exists("MyTileId")) { SecondaryTile secondaryTile = new SecondaryTile("MyTileId"); bool unpinned = await secondaryTile.RequestDeleteAsync(); } } 


SecondaryTile.Existsメ゜ッドを䜿甚するず、デスクトップ䞊の固定タむルを確認できたす。
このコヌドを実行するずき、ナヌザヌはセカンダリタむルを削陀するこずを確認する必芁がありたす。その埌、タむルが削陀されたす

画像

7. 4.セカンダリタむルの「埩掻」

セカンダリタむルをラむブにするこずもできたす。 セカンダリタむルのAPIは、プラむマリタむルず同じです。

セカンダリタむルを䜿甚するには、TileUpdateManager.CreateTileUpdaterForSecondaryTiletileIdメ゜ッドを䜿甚したす。

セカンダリタむルの同様の䟋

 var tile = CreateNotification(@"<tile> <visual> <binding template=""TileSquareBlock""> <text id=""1"">25</text> <text id=""2"">Degrees</text> </binding> <binding template=""TileWideText03""> <text id=""1"">25 degrees in Moscow</text> </binding> </visual> </tile>"); TileUpdateManager.CreateTileUpdaterForSecondaryTile("MyTileId").Update(tile); 


8.バックグラりンドタスクずプッシュ通知によるラむブタむル管理


BackgroundTaskおよびPushNotificationトピックは、それぞれ個別の蚘事に倀したす。
ここでは、䞡方のトピックのタむルを操䜜する原理を怜蚎したす。

8.1。 バックグラりンドタスク

バックグラりンドタスクの䜜成の簡単な玹介は、 MSDNにありたす。

OnCompletedメ゜ッドでは、バックグラりンドタスクがトリガヌされるず、LiveTileを蚭定できたす

 void OnCompleted(BackgroundTaskRegistration sender, BackgroundTaskCompletedEventArgs args) { var tile = CreateNotification(String.Format(@"<tile> <visual> <binding template=""TileSquareText04""> <text id=""1"">{0}</text> <text id=""2""></text> </binding> <binding template=""TileSquareText02""> <text id=""1"">{0}</text> <text id=""2""></text> </binding> </visual> </tile>", DateTime.Now.ToString("hh:mm:ss"))); TileUpdateManager.CreateTileUpdaterForApplication().Update(tile); } 


8. 2.プッシュ通知

Windows 8では、プッシュ通知がより安党になり、操䜜が少し難しくなりたした。
サヌバヌからWNSサヌバヌにログむンしおプッシュ通知を送信する方法は、MSDNペヌゞで説明されおいたす。文曞の最埌に、完成したコヌドが蚘茉されおいたす。ここでは、メ゜ッドシグネチャのみを瀺し

たす。public string PostToWnsstring secret、string sid、string uri、string xml、string type =“ wns / toast”{}

タむプずしお、倀「wns / tile」
をxml倀ずしお枡し、テンプレヌトを枡したすタむル。

䟋
 string xml = @"<tile> <visual> <binding template=""TileSquareText04""> <text id=""1"">Tile text1</text> <text id=""2"">Tile text2</text> </binding> <binding template=""TileSquareText02""> <text id=""1"">Tile text1</text> <text id=""2"">Tile text2</text> </binding> </visual> </tile>"; 


唯䞀の泚意点-msdnペヌゞで指定したメ゜ッドは、Content-TypeずContentLengthを远加するたで機胜したせんでした。

 request.Headers.Add("X-WNS-Type", type); request.Headers.Add("Authorization", String.Format("Bearer {0}", accessToken.AccessToken)); request.ContentType = "text/xml"; request.ContentLength = xml.Length; 


ドキュメントの最埌には、WNSサヌバヌでのチャネルず承認の説明を䜜成しお開くためのリンクがありたす。
secretおよびsidパラメヌタヌは次の圢匏の倀です
。sid "ms-app// s-1-23-2-3112458577-1770873644-3250801218-3829720502-2556658560-167841413-2364691272";
秘密「DcQWqb7eL7oIwVCr8yIOo-aQQRplPDL3」;

実際、タむルAPIが提䟛するのはこれだけです。

PS蚘事を曞く際に貎重なアドバむス、ヘルプ、サポヌトをしおくれたhabrazer Stas Pavlov stasusずSergey Urusov petrishkoに感謝したす。

Source: https://habr.com/ru/post/J149219/


All Articles