Oktober 2015

Band 30, Nummer 10

Dieser Artikel wurde maschinell übersetzt.

Microsoft Band – Entwickeln einer Windows 10-App mit dem Microsoft Band SDK

Durch Kevin Herr Herr

Microsoft Bing vorherzusagende Wearables würde den Trend der neuesten Technologie in 2015 (binged.it/1hCBv9A), im Voraus Personal Digital Assistants, intelligentes wohnen, 3D-Druck und virtual Reality-Spiele.

Ein Gerät, Microsoft-Band werden die meisten Benutzer ihre Gesundheit, Fitness, Ruhezustand Qualität und vieles mehr nachverfolgen müssen Sensoren kombiniert. Auf dem Markt, verpackt er weitere Sensoren als viele teurer Geräte verfügbar.

Ich bin als Entwickler einer mobilen Anwendung nützliche Anwendung mit Microsoft Band erstellen möchten. Einige der Beispiele in diesem Code habe ich in meiner app Active Fitness (activefitness.co), die mehr als 2 Millionen Benutzer auf Windows-, IOS- und Android verwendet. Die meisten verbraucherapps müssen auf mehreren Plattformen wie z. B. Windows-, IOS- und Android, um eine maximale Zielgruppe erreichen, arbeiten. In diesem Artikel erkläre ich zum Entwickeln von apps für Windows 10 für Band und plattformübergreifende Optionen zum Durchsuchen. Es wurde eine Ehre zur Teilnahme an der frühen Versionen des SDK Band. Nun, es öffentlich verfügbar gemacht wurde, kann ich die Codebeispiele, die mit den neuesten Versionen des SDK-Band- und die Entwicklercommunity verbessert freigeben.

Schwerkraft Hero: Beispiel-App für Windows 10

Ich möchte etwas Spaß zu erstellen, werden die Band-Funktionen und gleichzeitig funktioniert fast wie ein Spiel. Damit ich eine universelle Windows-Anwendung namens "Schwerkraft Hero", erstellt, siehe Abbildung 1. Die Idee ist einfach: Sie wechseln das Band mit und das Gerät erfahren Sie, ob Sie jemals die beste Sprung gemacht. Und da ich eine universelle Windows-app erstellt haben, funktioniert es auf jedem Windows-10-Gerät. Außerdem hinzugefügt Beispielcode auf GitHub für eine systemeigene Android-app, um zu veranschaulichen, wie Sie problemlos andere mobile Geräte können. Die Band Developer-Website enthält außerdem Links zu Dokumentationen und SDK-Codebeispiele (developer.microsoftband.com).

Schwerkraft Hero-Beispiel-App unter Windows 10
Abbildung 1 Schwerkraft Hero-Beispiel-App unter Windows 10

Das Microsoft-Band-Team bietet SDKs für Windows, iOS und Android. Es ist außerdem eine plattformübergreifende SDK-Lösung mit Xamarin Technologie, die einen guten Code wiederverwenden kann. Welche Technologie sollten Sie wählen? Mit der Unterstützung von Microsoft und der Community haben Sie die folgenden Optionen bei der Entwicklung für das Band-Gerät:

  • Microsoft-Band-SDK (Microsoft) für die systemeigene Entwicklung mit Windows-, IOS- und Android (bit.ly/1JfiFvW)
  • Web-Kachel-SDK (Microsoft) für die schnelle Bereitstellung von Informationen in das Band aus beliebigen Quellen Web in wenigen einfachen Schritten (bit.ly/1h94CjZ)
  • Cloud-API (Microsoft) für den Zugriff auf Rest-APIs mit umfassenden Fitness und der Integrität Daten in einem leicht nutzen JSON-Format (bit.ly/1MIBOL7)
  • Plattformübergreifende SDK (Xamarin) für die Verwendung in Xamarin plattformübergreifende apps für iOS, Android und Windows; mit Xamarin können Sie eine einzelne Codebasis für alle Plattformen (bit.ly/1EfhqjK)

Wenn Sie bereits über eine Windows, iOS oder Android-app verfügen, verwenden Sie einfach eine native-Band-SDK für diesen Plattformen. Wenn Sie von Grund auf neu beginnen oder alle Plattformen mit demselben Code entwickeln möchten, empfiehlt es sich, einen Blick auf Xamarin. Sie haben die Wahl. Der geeignete Plattform-Ansatz bietet Ihnen die Optionen, die Sie apps erstellen möchten. In diesem Artikel betrachte ich beide Optionen.

Verbinden das Band mit einem 10-Windows-PC

Bevor Sie mit der Entwicklung beginnen, müssen Sie das Band mit einem Windows-10-PC zu verbinden. Windows 10 unterstützt Bluetooth, daher ist dies ganz einfach:

Kippen Sie auf Ihrer Band der Kachel Einstellungen, klicken Sie auf das Bluetooth-Symbol, und Pairing wechseln. Ihre Band befindet sich jetzt im Modus koppeln. Gehen Sie auf Ihrem Windows-10-PC-Einstellungen Bluetooth in Cortana eingeben, und öffnen Sie die Bluetooth-Einstellungsseite Siehe Abbildung 2. Beachten Sie den Status Ihrer Band in der Liste der Bluetooth-Geräte. Band Namen wird normalerweise mit Ihrem Namen und einen Code beginnen, es sei denn, Sie in einen anderen geändert haben (in diesem Fall besteht das "Kevin Band-Ec:5a"). Wenn der Status "Verbunden" angezeigt wird, können Sie startbereit. Andernfalls tippen Sie Paar und befolgen.

Verbinden von Microsoft Band auf einem PC mit Windows 10
Abbildung 2 Microsoft Band auf einem PC mit Windows 10 verbinden

Erstellen eine Windows-10-App in Visual Studio

Sie können mit der Beispiel-app, die ich auf GitHub erstellt beginnen (bit.ly/1U2sLup). Beachten Sie, dass, wenn Sie Ihre Anwendung von Grund auf neu erstellen möchten, Sie Gerätefunktion Bluetooth in das Manifest eingeschlossen werden sollen müssen. Diese Funktion nicht von Visual Studio standardmäßig in die Anwendungsvorlage gehören:

<Capabilities>
  <DeviceCapability Name="bluetooth" />
</Capabilities>

Wenn Sie Ihre Anwendung das Band hinzufügen oder eine Windows-10-app von Grund auf neu erstellen müssen Sie ein Microsoft-Band-NuGet-Paket zu erhalten. Es gibt mehrere Pakete, einige von Microsoft erstellt und einige zusätzliche von der Community (z. B. das Xamarin.Microsoft.Band-Paket). Im Rahmen der universelle Windows-app, fügte ich das Paket Microsoft Siehe Abbildung 3.

Microsoft-Band-NuGet-Pakete
Abbildung 3 Microsoft-Band-NuGet-Pakete

Das Microsoft-Band-SDK können Entwickler Sensoren auf Band, erstellen und Aktualisieren von Kacheln und Personalisieren des Geräts zuzugreifen. Ihre app kann Benachrichtigungen, einschließlich Haptics, um das Band senden. Das Band selbst hat eine hübsche, saubere und einfache aussieht, siehe Abbildung 4.

Microsoft Band
Abbildung 4: Microsoft Band

Das Band steckt voller Sensoren (eine vollständige Liste finden Sie in Abbildung 5); im Rahmen meiner Schwerkraft Hero-Beispiel-app, ich habe mich auf den Beschleunigungsmesser Sensor.

Abbildung 5-Sensoren, die auf der Microsoft-Band

Temperatursensor Details
Beschleunigungsmesser Bietet eine Beschleunigung von X, Y und Z in g Einheiten. 1 g = 9.81 Meter pro Sekunde im Quadrat (m/s2).
Gyroscope Stellt X, Y und Z Winkelgeschwindigkeit in Grad pro Sekunde (° / s)-Einheiten.
Abstand Stellt die gesamte Entfernung in Zentimeter, aktuelle Geschwindigkeit in Zentimeter pro Sekunde (cm/s), aktuelle Geschwindigkeit in Millisekunden pro Meter (ms/m) und den aktuellen Schrittzähler-Modus (z. B. durchlaufen oder ausgeführt).
Heart Rate

Stellt die Anzahl der Schläge pro Minute. Gibt außerdem an, wenn das Sensor Herz Rate vollständig auf den Betriebsvorgänge Herz Rate gesperrt ist.

Nur im Modus befindet, sollte die zurückgegebenen Daten verwendet werden. Das Band SDK stellt Zugriff auf die Kern-Rate-Werte für jede andere Aktivität optimiert bereit.

Schrittzähler Stellt die Gesamtzahl der Schritte, die den Betriebsvorgänge übernommen hat.
Design-Temperatur Stellt die aktuelle Temperatur Design der Betriebsvorgänge in Grad Celsius.
UV Stellt die aktuelle ultravioletten Feldern Exposition Intensität.
Band Kontakt Stellt den aktuellen Status des Bands als wird abgenutzt/nicht abgenutzt.
Kalorien Stellt die Gesamtanzahl der Kalorien, die den Betriebsvorgänge zu brennen.

Ein Datenmodell

Wie immer, mit einem Datenmodell in Visual Studio starten Siehe Abbildung 6. Ein guter Datenmodell hilft immer, wie sie Daten in einer separaten Ebene, die problemlos gemeinsam genutzt werden können über Ihre apps und sogar Cloud Back-End trennt, wenn Sie sich entscheiden, eine Website anzeigen der Daten. Ich möchte meine Datenmodell flexibel genug, um Daten von Sensoren sammeln und in die Schwerkraft Hero-app präsentieren stellen. Ich kann meine Datenmodell in anderen apps wiederverwenden, platzieren es in einen separaten Ordner in meinem Visual Studio-Projektmappe ist.

Visual Studio-Projektmappe mit dem Beispielprojekt und Datenmodell
Abbildung 6: Visual Studio-Projektmappe mit dem Beispielprojekt und Datenmodell

Das Datenmodell für die Schwerkraft Hero-app ist eine Hilfsklasse bequem mit "ViewModel" verwenden. Kann ich sehr viele vorhandene Bibliotheken von Model-View-ViewModel (MVVM)-Hilfsprogramm verwenden, aber in diesem Beispiel kann ich einfach implementiert eine, um den Code so transparent wie möglich zu gestalten. Die ViewModel-Klasse implementiert die INotifyPropertyChanged-Schnittstelle. Dies ist ein Recht üblicher Ansatz in .NET apps in Ihrem Datenmodell in der Benutzeroberfläche aktualisiert werden sollen. In meinem Beispiel-app-Implementierung möchte ich sicherstellen, dass die Klasse, die die Benutzeroberfläche mittels des PropertyChanged-Mechanismus benachrichtigt.

SensorReading ist die Klasse catch-Band-Sensor Messwerte, und informieren Sie alle Elemente in der Benutzeroberfläche, die für die Änderungen des Datenmodells abonniert wird. Sehen wir uns diese Klasse genauer. Die Klasse "ViewModel" bereits vorgestellten abgeleitet und enthält auch die Attribute, die zum Serialisieren von Daten und senden es über das Netz (zum Beispiel Ihre Cloud-Speicher) nützlich sein können. DataContract-Attribut für die SensorReading-Klasse führt genau das und DataMember-Attribute auf einzelnen Datenmember für Daten, entweder in JSON oder XML, je nach dem Serialisierungsprogramm serialisiert werden soll. Ein weiterer Vorteil der SensorReading-Klasse ist, dass es eine normalisierte Form bietet, da die Klasse einen 3D-Vektor lesen oder Vector3 enthält. Siehe Abbildung 7, ich gebe auch einem Wertmember, der einen normalisierten Vektor (ein sehr sinnvoll, wenn Sie 3D Berechnungen handhaben) zurückgibt.

Abbildung 7 SensorReading-Klasse für das Sensor-Datenmodell

[DataContract]
public class SensorReading : ViewModel
{
  DateTimeOffset _timestamp;
  [DataMember]
  public DateTimeOffset Timestamp
  {
    get { return _timestamp; }
    set
    {
      SetValue(ref _timestamp, value, "Timestamp");
    }
  }
  double _x;
  [DataMember]
  public double X
  {
    get { return _x; }
    set
    {
      SetValue(ref _x, value, "X", "Value");
    }
  }
  double _y;
  [DataMember]
  public double Y
  {
    get { return _y; }
    set
    {
      SetValue(ref _y, value, "Y", "Value");
    }
  }
  double _z;
  [DataMember]
  public double Z
  {
    get { return _z; }
    set
    {
      SetValue(ref _z, value, "Z", "Value");
    }
  }
  public double Value
  {
    get
    {
      return Math.Sqrt(X * X + Y * Y + Z * Z);
    }
  }
}

BandModel dient zum Verwalten des Bands, siehe Abbildung 8. Dies ist der Managerklasse, die dabei hilft, für den Fall, dass ich mehrere-Band-Geräte, die mit meinem PC verbunden sind. Sie können mich auch anweisen, wenn alle Bänder verbunden ist.

Abbildung 8 BandModel für die Verwaltung der Bänder

public class BandModel : ViewModel
{
  static IBandInfo _selectedBand;
  public static IBandInfo SelectedBand
  {
    get { return BandModel._selectedBand; }
    set { BandModel._selectedBand = value; }
  }
  private static IBandClient _bandClient;
  public static IBandClient BandClient
  {
    get { return _bandClient; }
    set
    {
      _bandClient = value;
    }
  }
  public static bool IsConnected
  {
    get {
      return BandClient != null;
    }
  }
  public static async Task FindDevicesAsync()
  {
    var bands = await BandClientManager.Instance.GetBandsAsync();
    if (bands != null && bands.Length > 0)
    {
      SelectedBand = bands[0]; // Take the first band
    }
  }
  public static async Task InitAsync()
  {
    try
    {
      if (IsConnected)
        return;
      await FindDevicesAsync();
      if (SelectedBand != null)
      {
        BandClient =
          await BandClientManager.Instance.ConnectAsync(SelectedBand);
        // Connected!
          BandModel.BandClient.NotificationManager.VibrateAsync(
            Microsoft.Band.Notifications.VibrationType.ExerciseRunLap);
      }
    }
    catch (Exception x)
    {
      Debug.WriteLine(x.Message);
    }
  }
}

AccelerometerModel wurde speziell für das Spiel Schwerkraft Hero entwickelt. Schwerpunkt ist die Kraft, die vom integrierten Beschleunigungsmesser Sensor auf dem Band besser gemessen werden kann. Jetzt sehen Sie, wie Data Model-Klassen erstellt werden; Sie können zusätzliche Klassen für alle Sensoren Band hinzufügen, die Sie in Ihren apps verwenden möchten. Wenn ich die Klasse des Beschleunigungsmessers in der Init-Methode initialisiert werden müssen, ich mehrere Ereignisse abonnieren benutzerfreundlichere vom Band SDK:

if (BandModel.IsConnected)
  {
    BandModel.BandClient.SensorManager.
      Accelerometer.ReadingChanged +=
      Accelerometer_ReadingChanged;
    BandModel.BandClient.SensorManager.
      Accelerometer.ReportingInterval =
      TimeSpan.FromMilliseconds(16.0);
    BandModel.BandClient.SensorManager.
      Accelerometer.StartReadingsAsync(
      new CancellationToken());
    totalTime = 0.0;
  }

Das erste Ereignis ist ReadingChanged. Dies ist das Ereignis, das ich Daten basierend auf den ReportingInterval ich definierte Zeitraum Beschleunigungsmesser Sensor ermöglicht. Zum Lesen von Werten der Beschleunigungsmesser, verwende ich einen Schwellenwert 16 ms. Es ist wichtig, das Berichtsintervall so klein wie möglich für die Genauigkeit beibehalten und gleichzeitig berücksichtigen, dass der akkuenergieverbrauch mit umfassenden Gebrauch von der Sensor erhöht. Als Nächstes rufe ich die StartReadingsAsync, die Methode, die gestartet wird, Lesen von Werten aus der Sensor und sendet sie an die Anwendung zurück. Diese Methode startet nur einen Listener für Sensor Daten angezeigt. Die Daten werden an das ReadingChanged-Ereignis übergeben.

Das ReadingChanged-Ereignis ich erfassen das Lesen und Neuberechnen von Werten in meinem Datenmodell:

void Accelerometer_ReadingChanged(object sender,
  BandSensorReadingEventArgs<IBandAccelerometerReading> e)
{
  SensorReading reading = new SensorReading {
    X = e.SensorReading.AccelerationX, Y = e.SensorReading.AccelerationY,
    Z = e.SensorReading.AccelerationZ };
  _prev = _last;
  _last = reading;
  Recalculate();
}

Die Modell Recalculate-Methode geschieht, in denen ein Großteil der Logik (siehe Abbildung 9). Ich möchte zurück an die app Changed-Ereignis ausgelöst, wenn ich die Werte, die früher erreicht werden, wenn ich das Spiel bereits begonnen überschreiten. Beachten Sie, dass ich hier ein Schwerkraft Hero-Spiel implementieren, damit ich Suche die besten Ergebnisse erzielen. Ich möchte sicherstellen, dass ich die Dispatcher-Klasse verwenden, da Sensorereignissen Band auf nicht-UI-Threads ausgelöst werden können, daher muss ich den Code für meine Changed-Ereignis im UI-Thread zu marshallen.

Abbildung 9: die Modell Recalculate-Methode

DateTimeOffset _startedTime = DateTimeOffset.MinValue;
double totalTime = 0.0;
double lastTime = 0.0;
SensorReading _prev;
SensorReading _last;
double MIN = 0.4;
void Recalculate()
{
  if (_last.Value <= MIN)
  {
    if (_startedTime > DateTimeOffset.MinValue)
      lastTime = (DateTimeOffset.Now - _startedTime).TotalSeconds;
    else
      _startedTime = DateTimeOffset.Now;
    }
    else
    {
      if (_startedTime > DateTimeOffset.MinValue)
      {
        lastTime = (DateTimeOffset.Now - _startedTime).TotalSeconds;
        totalTime += lastTime;
        lastTime = 0.0;
        _startedTime = DateTimeOffset.MinValue;       
          CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
          CoreDispatcherPriority.Normal,        () =>
        {
          if (Changed != null)
            Changed(_last.Value);
            });
        }
      }
    }
¡  } 
}

Meine Benutzeroberfläche muss aktualisiert werden, wenn Ereignisse aus dem Band zurückkehren (siehe Abbildung 10). Dies erfolgt in das Changed-Ereignis, das ich in meinem "MainPage.xaml" abonniert. G-Force anzuzeigen, und Erfolge zu zählen. Ich auch rufen Sie das Band haptic Feedback über die VibrateAsync-Methode. Als Benutzer von Band bereits viele Monate gefällt mir wirklich gut haptic Benachrichtigungen senden (Denken sie missbrauchen und benachrichtigen die Benutzer nur bei Bedarf).

Abbildung 10 UI aktualisiert Changed-Ereignis

void _accelerometerModel_Changed(double force)
{
  bandCount++;
  UpdateCount();
  if (force > maxForce)
  {
    maxForce = force;
    heroText.Text = String.Format("Intensity {0:F2}G", maxForce);
  }
  if (!isAchievementUnlocked && bandCount >= maxCount*0.2)
  {
    Speak("Just a few more!");
    isAchievementUnlocked = true;
  }
  if (!isSecondAchievementUnlocked && isAchievementUnlocked &&
    bandCount >= maxCount * 0.8)
  {
    Speak("Almost there!");
    isAchievementUnlocked = true;
  }
    BandModel.BandClient.NotificationManager.VibrateAsync(
      Microsoft.Band.Notifications.VibrationType.ExerciseRunLap);
  // Speak(bandCount.ToString()+"!");
}

Das macht Spaß beginnen können

Alles vorhanden, lassen Sie das Fun beginnen. Erstellen Sie und starten Sie die Anwendung: Beachten Sie, dass die Anwendung auf einem beliebigen Windows-10-Gerät ausgeführt wird. Da ich die Sensoren Band verwende, interessiert mich jetzt nicht über Unterstützung für Beschleunigungsmesser PC oder Telefon. Ich werde einen PC verwenden zum Anzeigen von Informationen über das Band, während das Band die harte Arbeit auszuführen.

Siehe Abbildung 11, wenn Sie die Anwendung zum ersten Mal starten, von Visual Studio oder von der Tile Windows 10 automatisch aufgefordert zu bestätigen, dass Sie das Band; Schwerkraft Hero app Zugriff gewähren möchten nur wählen Sie "Ja".

Windows 10 Dialogfeld fordert automatisch Zugriff auf das Band
Abbildung 11: Windows 10 Dialogfeld fordert automatisch Zugriff auf das Band

Verbindungsaufbau Schwerkraft Hero in das Band, entspannen Sie das Band vibrationsschaltung. Dies geschieht absichtlich, darüber informiert, dass alles Sprungziel eingerichtet ist. Hinzugefügte auch akustische Aufforderung erhalten, dass die Aktion gestartet werden kann:

BandModel.BandClient.NotificationManager.VibrateAsync(
  Microsoft.Band.Notifications.VibrationType.ExerciseRunLap);

Halten Sie jetzt springen. Die app wird die Sprünge zu zählen und gratulieren Sie auf jede Auszeichnung.

Alle Beispielcode für diesen Artikel ist auf GitHub verfügbar: bit.ly/1MIKIIK. Um diese Datenquelle verwenden können Sie Visual Studio 2015 und Windows-10. Das Projekt verwendet das Microsoft-Band-SDK NuGet-Paket.

Nachbereitung

Microsoft Band bietet leistungsstarke SDKs und Support durch die Community für mehrere Plattformen: Windows, Android und iOS. Microsoft-SDKs und Communitykomponenten von Xamarin, GitHub und die Entwickler-Community können Entwickler apps zur Verwendung von Microsoft Band erweitern. Sie können den Code in diesem Artikel verwenden, Microsoft Band in Ihre eigenen apps für Windows 10 zu integrieren.


Kevin Ashleyist senior Spiel Developer Evangelist für Microsoft. Er ist Mitautor von "Professional Windows 8 Programming" (Wrox, 2012) und Entwickler von Top-apps und Spiele, insbesondere Active Eignung, die mehr als 2 Millionen Benutzer hat (activefitness.co). Er zeigt sich oft auf Technologie auf verschiedene Ereignisse, zeigt der Branche und Webcasts. In seiner Rolle arbeitet er mit Startups und Partnern, Beratung über Softwareentwurf, geschäftliche und IT-Strategie, Architektur und Entwicklung. Sie können die Herr Kopf folgen, in seinem Blog unter kevinashley.com und auf Twitter @kashleytwit.

Vielen Dank an den folgenden technischen Experten von Microsoft für die Überprüfung dieses Artikels: Jaime Rodriguez