App-Entwicklung für das Microsoft Band

Entwickeln mit dem Microsoft Band SDK
1 Kommentar

Aktuell sind Fitnessarmbänder und Smartwatches stark im Trend. Viele der großen Hersteller wie Apple mit der iWatch oder Sportausrüster mit ihren Fitnessarmbändern sind bereits auf diesen Zug aufgesprungen. Seit dem Frühjahr hat auch Microsoft, zunächst exklusiv für die USA und einigen weiteren Ländern, sein Wearable herausgebracht: das „Microsoft Band“. Dieses bietet sowohl den Fitnessaspekt als auch Funktionen des Smartphones auf dem Armband und steht Entwicklern für eigene Apps offen.

In diesem Artikel möchte ich die Möglichkeiten zur App-Entwicklung und der Erweiterbarkeit mit dem aktuellen Microsoft-Band-SDK für Entwickler beleuchten. In einem Folgeartikel werde ich anschließend näher auf die neuen Schnittstellen „Web Tile“ und „Cloud API“ eingehen. Diese wurden während des Schreibens dieses Artikels freigegeben und befinden sich derzeitig noch im Previewstadium.

Das Microsoft Band

Das Microsoft Band ist Fitnesstracker und Smartwatch in einem (Abb. 1). Es wird zunächst mit dem Smartphone über Bluetooth gekoppelt und kann über die Microsoft-Health-App verwaltet werden. Die App ist für alle drei großen Plattformen verfügbar. So lässt sich das Band sowohl mit Microsoft-Systemen als auch mit iOS- und Android-Devices verbinden.

Abb. 1: Microsoft Band, © Microsoft

Abb. 1: Microsoft Band, © Microsoft

Eine „App“ auf dem Band wird als Tile bezeichnet, das über die Health-App aktiviert und deaktiviert werden kann, da auf dem Band nur eine bestimmte Anzahl an Tiles gleichzeitig aktiv sein darf. Das Band wird mit Funktionen zum GPS-Tracken für verschiedene Sportarten wie Laufen und Radfahren ausgeliefert. Einen Schlaftracker, Aufzeichnung der Schritte, Kalorien, Distanz, die am Tag zurückgelegt wurde und die Herzschläge pro Minute sowie einen UV-Sensor bringt das Band ebenfalls mit. Der GPS-Tracker funktioniert auch ohne stetige Verbindung zum Handy und synchronisiert sich später automatisch. Man kann also nur mit dem Band joggen gehen und sobald Phone und Band wieder vereint sind, gleichen sich die Daten ab. Alle getrackten Daten können in der Health-App und im Health-Portal betrachtet werden. Dazu kommen die Funktionen, die sonst auf dem Phone zu finden sind, wie Anrufe sehen, SMS, E-Mails, Kalendereinträge und Erinnerungen. Sehr nützlich ist dabei, dass alle Benachrichtigungen aus dem Actioncenter des Phones auf dem Band angezeigt werden können und Cortana auch auf dem Band angesprochen werden kann. Die Antwort erscheint dann in Textform auf dem Display des Bands. Wem die vorhandenen Tiles nicht ausreichen oder wer seine Informationen in einem eigenen bereitstellen möchte, kann über das Microsoft-Band-SDK eigene Tiles entwickeln und auf das Band deployen. Die eigentliche Logik wird dabei auf dem Smartphone ausgeführt, das Band dient lediglich der Anzeige von Informationen und um Events auszulösen, die dann auf dem Smartphone ausgeführt werden.

Microsoft-Band-SDK

Das Microsoft-Band-SDK steht für die Plattformen iOS, Android und Windows bzw. Windows Phone zur Verfügung. Das SDK kann sowohl direkt auf der Band-Developer-Seite heruntergeladen werden, als auch über den NuGet Package Manager in Visual Studio.

In diesem Artikel werde ich die Band-Entwicklung aus Microsoft-Entwicklersicht zeigen, also mit Visual Studio in C# und mit Beispielen aus Windows-10-Universal-Apps. Das SDK steht jedoch genauso in vollem Funktionsumfang für Android und iOS zur Verfügung.

Das SDK kann u. a. mit dem Visual Studio 2013 und 2015 in Windows Store und Phone 8.1 und Windows-10-Universal-App-Projekte verwendet werden.

Manifest

In der Manifestdatei (Package.appxmanifest) müssen die in Listing 1 gezeigten Elemente hinzugefügt werden, um Bluetooth benutzen zu können, falls diese nicht bereits durch das NuGet Package ergänzt wurden.

Listing 1:
<DeviceCapability Name="proximity" />
<DeviceCapability Name="bluetooth.rfcomm" xmlns="http://schemas.microsoft.com/appx/2013/manifest">
  <Device Id="any">
    <!-- Used by the Microsoft Band SDK -->
    <Function Type="serviceId:A502CA9A-2BA5-413C-A4E0-13804E47B38F" />
    <!-- Used by the Microsoft Band SDK -->
    <Function Type="serviceId:C742E1A2-6320-5ABC-9643-D206C677E580" />
  </Device>
</DeviceCapability>

Band Studio

Da das Visual Studio keinen grafischen Oberflächendesigner für das Band anbietet, ist das Band Studio von Fela Ameghino aus der Visual Studio Gallery eine nützliche Hilfe zum Designen der Pages (Abb. 2). Im aktuellen SDK und Visual Studio ist der Weg, die Oberfläche eigener Pages ausschließlich direkt über C#-Objekte aufzubauen. Daher bildet das Band Studio gerade für Entwickler, die XAML gewöhnt sind, einen schnellen und unkomplizierten Einstieg. Das Band Studio ist derzeitig nur für Visual Studio 2013 verfügbar; wie der Entwickler der Extension mitteilte, wird an der Version für VS2015 bereits gearbeitet.

Tiles erstellen und auf dem Band installieren

Los gehts mit dem ersten Projekt: Der Deployment-Prozess ist immer der gleiche, egal ob eigene Pages entwickelt, Sensordaten empfangen oder Benachrichtigungen verschickt werden (Listing 2). Nach dem Erstellen eines Projekts und dem Hinzufügen des Band SDK NuGet Packages habe ich einen Button auf der MainForm platziert, um den dargestellten Code auszuführen. Es werden zunächst die using-Direktiven zu den Band Namespaces hinzugefügt. Anschließend geht es im Click-Event des Buttons weiter. Es ist zu beachten, dass das Band über die Bluetootheinstellungen des Smartphones gekoppelt werden muss, da dieser Teil nicht in einer App durchgeführt wird. Bevor installiert werden kann, muss also ermittelt werden, ob das Handy mit einem Band verbunden ist. Mit der asynchronen Methode GetBandsAsync() eines BandClientManager-Objekts kann ein Array von IBandInfo-Objekten abgerufen werden. Jedes Objekt stellt ein Band dar. Im Normalfall befindet sich also ein Objekt darin, wenn ein Band gefunden wurde und keines, wenn kein Band gekoppelt ist.

Wurde kein Band gefunden, wird die Methode hier beendet, ansonsten arbeiten wir mit dem ersten weiter und stellen die Verbindung über den Aufruf von BandClientManager.Instance.ConnectAsync(pairedBands[0]) her. Es wird ein Objekt vom Typ IBandClient zurückgeliefert. Daraufhin kann die neue Tile erzeugt werden. Dem Band muss eine ID in Form einer Guid übergeben werden, anhand dieser kann die Tile später identifiziert werden, um Benachrichtigungen dort hinzusenden. Außerdem werden der Name, das TileIcon und das SmallIcon zugewiesen. Der Name wird in der Heath-App zum Verwalten der Tiles angezeigt. Das TileIcon ist das Icon der Tiles bei normaler Größe, das SmallIcon wird dann angezeigt, wenn zusätzlich eine Nummer mit auf der Kachel dargestellt wird, und ist kleiner. In der nächsten Zeile wird die Tile vom Band entfernt, falls es bereits installiert war. Daraufhin wird die neue Tile über die Methode AddTileAsync des bandClient.TileManager Propertys hinzugefügt.

Listing 2:
using Microsoft.Band;
using Microsoft.Band.Notifications;
using Microsoft.Band.Tiles;
...
private void btnInstall_Click(object sender, RoutedEventArgs e)
{
  // Liste der verbundenen Bands abrufen
  IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();
  if (pairedBands.Length < 1)
  {
    return;
  }
  
  // Mit dem Microsoft Band verbinden.
  using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
  {
    Guid myTileId = new Guid(Consts.BandGuid);
    BandTile myTile = new BandTile(myTileId)
    {
      Name = "Audiobook Player",
      TileIcon = await LoadIcon("ms-appx:///Assets/BandLogo46.png"),
      SmallIcon = await LoadIcon("ms-appx:///Assets/BandLogo24.png")
    };

    // Wenn bereits vorhanden, Tile entfernen
    await bandClient.TileManager.RemoveTileAsync(myTileId);

    // Tile auf dem Band erzeugen.
    await bandClient.TileManager.AddTileAsync(myTile);
  }
}

Benachrichtigung senden

Dies ist der einfachste Anwendungsfall, um Daten vom PC oder Phone auf dem Band anzuzeigen. Es muss zunächst wie in Listing 2 eine Verbindung zum Band-Client hergestellt werden. Anstatt die Tile zu entfernen und hinzuzufügen, wird diesmal folgende Methode aufgerufen:

await bandClient.NotificationManager.SendMessageAsync(myTileId, "Unsere Test Tile", "You are connected", DateTimeOffset.Now, MessageFlags.ShowDialog);

Über diese Methode wird eine Benachrichtigung zur entsprechenden Tile auf dem Band geschickt. Es kann auch durch ältere Benachrichtigungen gescrollt werden. Diese Methode benötigt die Tile-ID, um die Benachrichtigung einer Tile zuordnen zu können. Des Weiteren können Parameter für den Titel (der in Akzentfarbe dargestellt wird), den Body mit der eigentlichen Nachricht, einen Zeitstempel des Ereignisses und als letzter Parameter die Art der Benachrichtigung übergeben werden. Es kann bestimmt werden, ob die Notification als Dialog angezeigt werden soll MessageFlags.ShowDialog oder nur in der Liste der Benachrichtigung, wenn die Tile geöffnet wird MessageFlags.None.

Sensordaten auslesen

Auf dem Band stehen die in Tabelle 1 aufgeführten Sensoren zur Verfügung, die über das SDK abonniert werden können.

spettmann_band_tab1

 

Abb. 3: Band-Sensorachsen, © Microsoft

Abb. 3: Band-Sensorachsen, © Microsoft

Abbildung 3 zeigt die Achsen des Beschleunigungssensors und des Gyroskops. Die Abonnements werden durch den Band-Sensormanager auf dem Band-Client verwaltet, wobei dabei jeder Sensor einzeln abonniert werden muss. Ein Abonnement ist im Wesentlichen ein Event-Callback, der die Messdaten in bestimmten Abständen an das gekoppelte Gerät schickt. Einige Sensoren haben dynamische Intervalle, wie der Beschleunigungsmesser (Abb. 3) und der Herzschlagsensor. Für sie kann festgelegt werden, in welchen Intervallen die Werte geliefert werden sollen. Über folgendes Property können die zur Verfügung stehenden Intervalle abgerufen werden: bandClient.SensorManager.HeartRate.SupportedReportingIntervals. Über das Property bandClient.SensorManager.HeartRate.ReportingInterval kann das Intervall zugewiesen werden.

Da das Abonnieren der Sensoren zusätzlich den Akku des Bands belastet, ist es bei der Entwicklung wichtig, nur die Sensoren, die gerade wirklich benötigt werden, zu abonnieren. Einige Sensoren benötigen die Zustimmung vom Benutzer für das Abonnieren. An dieser Stelle greift das SDK ein, indem es den Benutzer automatisch zur Bestätigung auffordert. Listing 3 zeigt, wie der Sensor zum Messen des Herzschlags verwendet werden kann.

Listing 3:
using Microsoft.Band.Sensors;
...
Private async void btnSubscribeHeartbeat_Click(object sender, RoutedEventArgs e)
{
  // Wie in den vorherigen Beispielen muss zuvor der Band-Client verbunden werden.
  // Anschließend kann geprüft warden, ob der Sensornutzung zugestimmt wurde. 
  if (bandClient.SensorManager.HeartRate.GetCurrentUserConsent() != UserConsent.Granted)
  { 
    // Wenn nicht anfordern.  
    bandClient.SensorManager.HeartRate.RequestUserConsentAsync(); 
  }

  // Es folgt das Abonnieren des Events...
  bandClient.SensorManager.HeartRate.ReadingChanged += (sender, args) => 
  { 
    // Dieses Event wird nun im Intervall mit den neuen Werten gefeuert. 
  };
  // Und Starten des Sensors 
  try 
  { 
    await bandClient.SensorManager.HeartRate.StartReadingsAsync(); 
  } 
  catch (BandException ex) 
  { }
  
  // Über die Stopmethode kann der Sensor wieder angehalten werden.
  // await bandClient.SensorManager.HeartRate.StopReadingsAsync();
}

Weitere Möglichkeiten des aktuellen Band-SDKs

Das Band-SDK bietet neben den hier gezeigten noch vier weitere große Bereiche:

Custom Tile Layouts: Für das Band können eigene Oberflächen (Pages) entwickelt werden, die auf so genannten Pages angezeigt werden. Es können maximal acht Pages angezeigt werden, die durchgescrollt werden können. Um die Controls später mit Inhalt zu füllen, werden die einzelnen Controls mit IDs versehen. Der Inhalt kann so zu einem späteren Zeitpunkt über das PageData-Objekt an die Controls einer Seite geschickt werden.

Custom Tile Events: Es gibt drei Arten von Events, die an einer Tile abonniert werden können:

  • Tile entered (Die Tile wurde vom Benutzer gestartet).
  • Tile exited (Der zurück Button wurde gedrückt).
  • Button pushed (Der Benutzer hat einen Button gedrückt).

Vibrationen und Signale: Über die Methode bandClient.NotificationManager.VibrateAsync(VibrationType.NotificationAlarm); können dem Band verschiedene Signale übergeben werden, damit es sich bei seinem Träger bemerkbar macht.

Band-Personalisierung: Über das SDK lässt sich das Band mit einem Theme versehen. Es ist möglich, die Me-Tile, also die große Kachel mit der Uhrzeit, farblich anzupassen und auch mit Hintergrundbildern zu belegen. Es lassen sich außerdem Text- und Kontrastfarben anpassen.

Zusammenfassung

Abschließend lässt sich sagen, dass es mit dem aktuellen SDK auf allen großen Plattformen bereits viele Möglichkeiten gibt, um die vorhandene Funktionalität zu erweitern. Ich hoffe, ich konnte Ihnen bereits mit diesem Artikel einen interessanten ersten Eindruck vermitteln, wie das Entwickeln mit dem Band-SDK unter Microsoft-Technologie funktioniert. Im Folgeartikel werde ich näher auf die zwei neuen Schnittstellen Cloud API und Web Tile eingehen.

Aufmacherbild: Silhouette of athletic woman running von Shutterstock / Urheberrecht: GaudiLab

Unsere Redaktion empfiehlt:

Relevante Beiträge

Abonnieren
Benachrichtige mich bei
guest
1 Kommentar
Inline Feedbacks
View all comments
trackback

[…] im vorigen Band-Artikel das Band-SDK näher betrachtet wurde, werden nun der Abruf bereits erfasster Daten über das Cloud […]

X
- Gib Deinen Standort ein -
- or -