Share via



Ottobre 2015

Volume 30 Numero 10

Il presente articolo è stato tradotto automaticamente.

Microsoft Band - Sviluppa un'app di Windows 10 App con Microsoft Band SDK

Da lavorerà Kevin

Microsoft Bing stimato wearables sarebbe la tendenza della tecnologia più all'avanguardia in 2015 (binged.it/1hCBv9A), prima PDA, automazione domestica, stampa 3D e giochi realtà virtuale.

Uno di questi dispositivi, Microsoft banda, combina i sensori la maggior parte delle persone necessario tenere sotto controllo l'integrità, idoneità, qualità di sospensione e altro ancora. Comprime più sensori di molti dei dispositivi più costosi disponibili sul mercato.

Gli sviluppatori di app per dispositivi mobili sono interessato alla creazione di applicazioni utili con banda Microsoft. Alcuni degli esempi utilizzati in questo codice ho utilizzato nell'applicazione idoneità Active (activefitness.co), che ha più di 2 milioni di utenti in Windows, iOS e Android. La maggior parte delle applicazioni consumer necessario lavorare su più piattaforme, ad esempio Windows, iOS e Android a raggiungere un pubblico massimo. In questo articolo spiegherò come sviluppare applicazioni Windows 10 per banda ed esplorare opzioni multipiattaforma. Era un onore partecipare nelle versioni precedenti del SDK di banda. Ora che sono già state disponibile pubblicamente, condividere esempi di codice, migliorati con le ultime versioni di SDK di banda e la community degli sviluppatori.

Hero gravità: Applicazione di esempio Windows 10

Volevo creare qualcosa di divertente che illustra le funzionalità di banda e allo stesso tempo funziona quasi come un gioco. Pertanto ho creato un'app di Windows universale chiamata "Gravità Hero", come illustrato nella Figura 1. L'idea è semplice: È passare che la banda e il dispositivo viene indicato se sono state mai il salto migliore. E poiché è stato creato un'app Windows universali, sarà funziona su qualsiasi dispositivo Windows 10. Ho inoltre aggiunto il codice di esempio su GitHub per un'applicazione Android nativa per illustrare come è possibile assegnare facilmente altri dispositivi. Inoltre, il sito Web Developer banda include collegamenti a documentazione ed esempi di codice SDK (developer.microsoftband.com).

Applicazione di esempio Hero gravità in esecuzione su Windows 10
Figura 1 applicazione di esempio Hero gravità in esecuzione su Windows 10

Il team di banda Microsoft fornisce SDK per Windows, iOS e Android. Inoltre, esiste una soluzione SDK multipiattaforma con Xamarin, tecnologia che consente un riutilizzo di codice eccellente. La tecnologia deve scegliere? Con il supporto di Microsoft e dalla community, sono disponibili le opzioni seguenti quando si sviluppa per il dispositivo di banda:

  • Microsoft banda SDK (Microsoft) per lo sviluppo nativo con Windows, iOS e Android (bit.ly/1JfiFvW)
  • Web tessera SDK (Microsoft) per il recapito rapidamente le informazioni nella banda da qualsiasi origine Web in pochi semplici passaggi (bit.ly/1h94CjZ)
  • Cloud API (Microsoft) per l'accesso alle API REST con i dati di idoneità e l'integrità completi in formato JSON da utilizzare (bit.ly/1MIBOL7)
  • Cross Platform SDK (Xamarin) per l'utilizzo nelle applicazioni multipiattaforma Xamarin, destinato a iOS, Android e Windows. con Xamarin è possibile utilizzare una singola base di codice per tutte le piattaforme (bit.ly/1EfhqjK)

Se si dispone già di un Windows, iOS o app per Android, utilizzare semplicemente un SDK banda nativo per ognuna di queste piattaforme. Se si lavora da zero o di destinazione tutte le piattaforme con lo stesso codice, è possibile dare un'occhiata a Xamarin. Due opzioni per ottenere risultati ottimali. L'approccio platform-friendly offre tutte le scelte che è necessario iniziare a creare applicazioni. In questo articolo verrà esaminato entrambe le opzioni.

La banda la connessione a un computer Windows 10

Prima di iniziare lo sviluppo, è necessario connettersi la banda 10 PC Windows. Windows 10 include il supporto Bluetooth, questo è molto semplice:

Nel tuo gruppo musicale, passa al riquadro impostazioni, fare clic sull'icona Bluetooth e passare all'associazione. La banda è in modalità di associazione. Nel computer Windows 10, passare alle impostazioni o digitare Bluetooth Cortana e aprire la pagina Impostazioni Bluetooth, come illustrato nella Figura 2. Si noti lo stato della banda nell'elenco di dispositivi Bluetooth. I nomi di banda in genere iniziano con il nome e un codice a meno che non è stato cambiato in un altro elemento (in questo caso, ho "Di Kevin banda ec:5a"). Se lo stato è indicato "Connesso", si è attivato; in caso contrario, toccare coppia e seguire le istruzioni.

La connessione a un computer Windows 10 banda Microsoft
Figura 2 banda Microsoft la connessione a un computer Windows 10

Creazione di un'applicazione Windows 10 in Visual Studio

È possibile iniziare con l'applicazione di esempio è stato creato in GitHub (bit.ly/1U2sLup). Tenere presente che se si decide di creare l'applicazione da zero, è necessario includere la funzionalità di dispositivi Bluetooth nel manifesto; Visual Studio per impostazione predefinita non include questa funzionalità nel modello di applicazione:

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

Se si aggiunge la banda per la propria applicazione o creare un'applicazione Windows 10 da zero è necessario anche ottenere un pacchetto NuGet di banda di Microsoft. Esistono diversi pacchetti, alcune create da Microsoft e alcuni aggiunto dalla community (ad esempio il pacchetto Xamarin.Microsoft.Band). Ai fini di app Windows universali, ho aggiunto il pacchetto di Microsoft, come illustrato nella Figura 3.

Pacchetti NuGet banda Microsoft
Figura 3 Microsoft banda NuGet pacchetti

il SDK di banda di Microsoft consente agli sviluppatori di accedere ai sensori di banda, la creazione e l'aggiornamento di riquadri e la personalizzazione del dispositivo. L'applicazione può inviare notifiche, tra cui haptics, per la striscia. La banda stesso ha un aspetto interessante, pulito e semplice, come illustrato nella Figura 4.

Microsoft Band
Figura 4 Microsoft banda

La banda è dotata di sensori (l'elenco completo può essere visualizzato Figura 5), ai fini della mia applicazione di esempio Hero gravità, mi sono concentrato sul sensore accelerometro.

Figura 5 sensori disponibili sulla banda Microsoft

Sensore Dettagli
Accelerometro Fornisce l'accelerazione X, Y e Z nell'unità c. 1 g = 9.81 in metri al secondo al quadrato (m/s2).
Giroscopio Velocità angolare in gradi per seconda unità (° / sec) fornisce X, Y e Z.
Distanza Fornisce la distanza totale in centimetri, velocità corrente in centimetri (cm/s), secondo il ritmo corrente in millisecondi per metro (ms/m) e la modalità di pedometer corrente (ad esempio o cammina).
Frequenza di base

Fornisce il numero di battute al minuto; indica inoltre se il sensore cuore frequenza è completamente bloccato nella frequenza cuore del ferimento.

I dati restituiti devono essere utilizzati solo in modalità di archiviazione. il SDK di banda non fornisce accesso ai valori della velocità di base ottimizzato per qualsiasi altra attività.

Pedometer Fornisce il numero totale di passaggi che è stata ferimento.
Interfaccia temperatura Fornisce la temperatura attuale di interfaccia di ferimento in gradi Celsius.
UV Fornisce l'intensità di esposizione ultravioletti corrente.
Banda contatto Fornisce lo stato corrente della banda di come viene logore logore/non.
Calorie Fornisce il numero totale di calorie che ferimento ha copiato.

Progettazione di un modello di dati

Come sempre, cominciare con un modello di dati in Visual Studio, come illustrato nella Figura 6. Un modello di dati validi aiuta sempre, come separa i dati in un livello separato, che può essere facilmente condiviso tra le applicazioni e persino un back-end di cloud se si decide di utilizzare un sito Web la visualizzazione dei dati. Si desidera rendere il modello di dati sufficientemente flessibile per raccogliere dati dai sensori e di presentarle nell'app Hero gravità. È possibile riutilizzare il modello di dati in altre applicazioni, quindi vale la pena collocandola in una cartella distinta nella soluzione Visual Studio.

Soluzione di Visual Studio con il progetto di esempio e il modello di dati
Figura 6 soluzione Visual Studio con il progetto di esempio e il modello di dati

Il modello di dati per l'applicazione di gravità Hero utilizza una classe helper denominata opportunamente ViewModel. È possibile utilizzare una miriade di librerie helper Model-View-ViewModel (MVVM) esistenti, ma in questo esempio ho semplicemente implementato uno per rendere il codice il più possibile trasparenti. La classe ViewModel implementa l'interfaccia INotifyPropertyChanged. Questo è un approccio piuttosto standard nelle applicazioni .NET per riflettere le modifiche nel modello di dati nell'interfaccia utente. Nell'implementazione dell'applicazione di esempio, desidero per assicurarsi che la classe di notifica all'interfaccia utente tramite il meccanismo PropertyChanged.

SensorReading è la classe letture dei sensori di banda di rilevare e segnalare qualsiasi elemento dell'interfaccia utente che ha sottoscritto la modifica del modello di dati. Esaminiamo questa classe più da vicino. La classe deriva da ViewModel introdotta in precedenza e include inoltre gli attributi che potrebbero essere utili per serializzare i dati e inviarlo via cavo (per l'archiviazione cloud, ad esempio). Attributo DataContract sulla classe SensorReading viene eseguito e consentono di attributi DataMember su singoli membri dati per i dati da serializzare in JSON o XML, a seconda del serializzatore. Un altro vantaggio per la classe SensorReading è che fornisce una forma normalizzata perché la classe contiene una lettura vettore 3D o Vector3. Come illustrato nella Figura 7, viene anche fornito un membro di valore che restituisce un vettore normalizzato (molto cosa utile quando si eseguono calcoli 3D).

Figura 7 SensorReading classe per il modello di dati del sensore

[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 viene utilizzato per gestire la banda, come illustrato nella Figura 8. Questa è la classe di gestione che consente di nel caso in cui ho più dispositivi banda connessi al computer; inoltre consente di verificare se una banda è connesso.

Figura 8 BandModel per la gestione di bande

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 è progettato specificamente per il gioco Hero gravità. Gravità è la forza che può essere misurata in modo efficace dal sensore accelerometro incorporato nella banda. Verrà visualizzata come vengono create le classi del modello di dati; è possibile aggiungere classi aggiuntive per i sensori di banda da utilizzare nelle applicazioni. Quando è necessario inizializzare la classe accelerometro nel metodo Init, ricevo diversi eventi opportunamente presentati dal SDK banda:

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;
  }

Il primo evento è ReadingChanged. Questo è l'evento che mi consente di dati del sensore accelerometro basato su ReportingInterval il periodo di tempo che è possibile definire. Per leggere i valori accelerometro, utilizzo una soglia di 16 ms. È importante mantenere l'intervallo di reporting più piccoli possibile per la precisione, ma allo stesso tempo, considerare che il consumo della batteria aumenta con utilizzo esteso del sensore. Quindi, chiamo StartReadingsAsync, il metodo che avvia la lettura dei valori del sensore e lo invia nuovamente all'applicazione. Questo metodo viene semplicemente avviato un listener per la lettura di dati dei sensori. I dati vengono passati all'evento ReadingChanged.

Nell'evento ReadingChanged acquisire la lettura e ricalcolare i valori nel mio modello di dati:

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();
}

Il ricalcolo modello consiste in cui viene eseguita la maggior parte della mia logica (vedere Figura 9). Si desidera generare l'evento Changed torna all'app quando si superano i valori ottenuti in precedenza quando ho iniziato il gioco. Tenere presente che è implementare un gioco di Hero gravità, in modo che si sta cercando di ottenere risultati ottimali. Si desidera assicurarsi che utilizzare la classe Dispatcher, poiché gli eventi di sensore banda possono essere attivati in thread non UI, pertanto è necessario effettuare il marshalling nel codice al thread UI per l'evento Changed.

Figura 9, il metodo modello Ricalcola

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);
            });
        }
      }
    }
¡  } 
}

L'interfaccia utente deve essere aggiornato quando gli eventi provengano dalla banda (vedere Figura 10). Questa operazione viene eseguita nell'evento Changed sottoscritto nel mio MainPage. Xaml. Ho visualizzare G-force e contare i traguardi. È inoltre possibile richiamare il feedback tattili banda tramite il metodo VibrateAsync. Come utente di banda per molti mesi, mi piacciono molto la possibilità di inviare notifiche tattili (ricordare di non abusare e inviare notifiche agli utenti solo quando opportuno).

Figura 10 UI aggiornati nell'evento di modifica

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()+"!");
}

Consentire Begin divertente

Ora, con tutte le operazioni sul posto, lasciare il divertimento begin. Compilare e avviare l'applicazione: Tenere presente che l'applicazione viene eseguita su qualsiasi dispositivo Windows 10. Poiché si utilizzeranno i sensori di banda, non mi preoccupo sul supporto di PC o il telefono per accelerometri. Un PC verranno utilizzate per visualizzare le informazioni di banda, mentre la banda necessario effettuare le attività.

Come illustrato nella Figura 11, quando si avvia l'applicazione per la prima volta sia da Visual Studio o dal riquadro, Windows 10 automaticamente chiesto di confermare che si desidera concedere l'accesso app Hero gravità a banda; selezionare Sì.

Finestra di dialogo Windows 10 automaticamente richiede l'accesso a banda
Figura 11 10 finestra di dialogo richiede automaticamente l'accesso a banda

Quando si connette gravità Hero nella banda, si percepirà la banda vibrazione. In questo modo intenzionalmente, consentono di verificare che tutto sia configurato per i passaggi. Ho aggiunto anche acustici richieste per ricevere una notifica che è possibile avviare l'azione:

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

A questo punto, mantenere il passaggio. L'applicazione verrà contare la selezione si sposta e si congratularsi su ogni traguardo.

Tutti i codice di esempio per questo articolo è disponibile su GitHub: bit.ly/1MIKIIK. Per utilizzare questa origine è possibile utilizzare Visual Studio 2015 e 10 di Windows. Il progetto utilizza il pacchetto NuGet di Microsoft banda SDK.

Avvolgendo

Microsoft Band offre SDK avanzati e il supporto della community per più piattaforme, ovvero Windows, Android e iOS. Gli sviluppatori possono utilizzare Microsoft SDKs e componenti della community di Xamarin, GitHub e la community degli sviluppatori di estendere le applicazioni per utilizzare Microsoft banda. È possibile utilizzare il codice in questo articolo per integrare Microsoft banda le proprie applicazioni per Windows 10.


Kevin Ashleyè un senior developer gioco evangelist per Microsoft. È coautore di "Professional Windows 8 Programming" (Wrox, 2012) e uno sviluppatore di applicazioni principali e giochi, in particolare idoneità attivo che ha più di 2 milioni di utenti (activefitness.co). Egli presenta spesso sulla tecnologia a vari eventi, Mostra settore e siti Web. Nel suo ruolo lavora con neo-imprese e partner, consigliare nella progettazione software, business e strategia tecnologica, architettura e sviluppo. È possibile seguire Alice sul suo blog all'indirizzo kevinashley.com e su Twitter @kashleytwit.

Grazie all'esperto tecnico Microsoft seguente per la revisione di questo articolo: Jaime Rodriguez