Windows 8 Tiles Updaten

Tiles, also Kacheln, sind die Visitenkarte einer Anwendung. Anders als ein Menü Icons kann über die WinRT API der Inhalt, also Text und Bild verändert werden. die Tiles haben so sich veränderte Inhalte- IN den METRO Style Guidelines steht, das man auf keinen Fall das für Werbung missbrauchen soll.  Einige tuns aber.

In meiner Windows 8 Demo Anwendung wird zunächst die Tile direkt beschrieben.  Mir fällt zwar kein Anwendungszweck ein, aus einer laufenden Anwendung, die unsichtbare Kachel zu aktualisieren, aber es geht.

Tiles werden in einem XML Format beschrieben. Dieses wird auch von Windows Push Notification genutzt. Um dieses XML Format zu erzeugen gibt es einen Helperklasse  TileUpdateManager.GetTemplateContent, mit der man aus den vorhandenen Templates auswählen können.

Als alter VB Programmierer nehme ich allerdings VB.NET Literals um das XML zu erzeugen. Das mag unter WinRT absurd wirken, aber sobald die Tile Daten von woanders kommen muss das XML ohnehin per Hand zusammen gesetzt werden. Dazu später ein wenig mehr VB Code.

Dim text1 = "Hallo"
Dim text2 = "Welt"
Dim tc As XDocument = <?xml version="1.0"?>
        <tile>
             <visual branding="name">
                <binding template="TileWideText09">
                   <text id="1"><%= text1 %></text>
                   <text id="2"><%= text2 %></text>
                </binding>
                <binding template="TileSquareText04">
                    <text id="1"><%= text1 %></text>
                </binding>
             </visual>
        </tile>
Dim xml As New XmlDocument
xml.LoadXml(tc.ToString)
TileUpdateManager.CreateTileUpdaterForApplication().Update(New TileNotification(xml))

Ja, liebe C# Entwickler, den Code kann man so direkt in Visual Studio tippen.

In den letzten zwei Zeilen wird aus einem .NET XDocument ein WinRT XMLDocument. Das geht unter reinem .NET mit GetXMLDocument. Die Methode fehlt der WinRT API aber.

In der letzten Zeile wird dann die Kachel aktualisiert. Abhängig davon ob sie quadratisch oder doppelt breit ist, mit unterschiedlichen Inhalten aus dem obigen XML Template.

image

Wesentlich näher dran an der Realität ist der dauerhafte Update, auch wenn die Anwendung nicht läuft, mittels Periodicupdate. Davon gibts eigenlich zwei, den StartPeriodicUpdateBatch für eine Liste von 5 und den StartPeriodicUpdate für eine URL. Im folgenden VB Sample wird ein Array mit einem Eintrag erzeugt.

TileUpdateManager.CreateTileUpdaterForApplication().
StartPeriodicUpdateBatch({
New Uri("http://localhost:55108/tile1.aspx")}, 
PeriodicUpdateRecurrence.HalfHour)

Das kleinste verfügbare Intervall ist 30 Minuten, siehe auch den Browser Blog Eintrag.

In meiner kleinen ASP.NET Website wird wieder mit XML literals das passende Live Tile Template zusammen gesetzt.

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Dim tc = <tile>
     <visual branding="name">
       <binding template="TileWideText09">
           <text id="1"><%= Date.Now.DayOfWeek %></text>
          <text id="2"><%= Date.Now %></text>
      </binding>
      <binding template="TileSquareText04">
            <text id="1"><%= Date.Now.DayOfWeek %></text>
      </binding>
   </visual>
   </tile>
    Response.Write(tc.ToString)
End Sub

Wenn die Tiles auch automatisch ausgetauscht werden sollen fehlt noch ein Zeile Code, die einmalig aufgerufen werden muss. (öfter geht auch)

TileUpdateManager.CreateTileUpdaterForApplication().
EnableNotificationQueue(True)

image

Es können maximal fünf Templates gewechselt werden. Um ein einzelnes Template gezielt auszutauschen kann eine TAG ID verwendet werden. Dieser X-WNS-Tag  kann man neben der Lebensdauer X-WNS-Expires im HTTP Header übertragen.

Natürlich kann man das Tile update auch wieder stoppen, per stopperiodicupdate.

Kommentare sind geschlossen