Vývoj pro Band (4) - notifikace

SDK umožňuje dvojí poslání notifikací do náramku (do konkrétní dlaždice aplikace). Je možné poslat pouze dialog, který se na chvíli zobrazí na displayi náramku - ten za chvíli zmizí nebo ho lze "zahodit" pomocí dismiss. Nebo lze poslat zprávu, která se volitelně také může zobrazit na náramku jako dialog, nicméně na rozdíl od dialogu zůstane přístupná pod dlaždicí do které byla poslána - navíc dlaždice zobrazuje počet nepřečtených zpráv (pokud to nemá zakázáno).

Dialog


try
{
  IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();

  if (pairedBands.Length < 1)
  {
    output.Text = "Nespárován žádný MS Band!";
    return;
  }

  using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
  {
    IEnumerable tiles = await bandClient.TileManager.GetTilesAsync();

    if (tiles.ElementAt(0) == null)
    {
      output.Text = "Aplikace nemá žádné dlaždice";
      return;
    }
    
    // poslání dialogu - (ID dlazdice, titulek, telo zpravy)
    await bandClient.NotificationManager.ShowDialogAsync(tiles.ElementAt(0).TileId, "Dialog title", "Dialog body");
    output.Text = "Dialog odeslán!";
  }
}
catch (BandException ex)
{
  output.Text = "zachycena výjimka: " + ex.Message;
}

Zpráva

try
{
  IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();

  if (pairedBands.Length < 1)
  {
    output.Text = "Nespárován žádný MS Band!";
    return;
  }

  using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
  {
    IEnumerable tiles = await bandClient.TileManager.GetTilesAsync();

    if (tiles.ElementAt(0) == null)
    {
      output.Text = "Aplikace nemá žádné dlaždice";
      return;
    }
    
    // poslání zprávy - parametry: ID dlazdice, nadpis, telo zpravy, zobrazene datum u zpravy, flag = s nebo bez dialogu  
    await bandClient.NotificationManager.SendMessageAsync(tiles.ElementAt(0).TileId, "Titulek", "Telo zprávy", DateTimeOffset.Now, MessageFlags.None);
    output.Text = "Zpráva odeslána!";
  }
}
catch (BandException ex)
{
  output.Text = "zachycena výjimka: " + ex.Message;
}

Vývoj pro Band (3) - správa dlaždic aplikace

V MS Bandu můžete vytvářet nové dlaždice, počet vytvořených dlaždic vaší aplikací je limitován počtem aktuálně volných slotů v náramku (i to lze zjistit v aplikaci).
Takto vytvořené dlaždice lze spravovat, mazat a dále s nimi v rámci aplikace pracovat.

Výpis volných slotů v náramku

try
{
  IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();

  if (pairedBands.Length < 1)
  {                //CHYBA
      return;
  }
  using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
  {
     // počet volných slotů
     int tileCapacity = await bandClient.TileManager.GetRemainingTileCapacityAsync();
    output.Text = "Dostupná kapacita dlaždic: " + tileCapacity.ToString();
  }
}
catch (BandException ex)
{ 
  // handle a Band connection exception
} 

Vložení nové dlaždice

try
{
  IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();

  if (pairedBands.Length < 1)
  {  
    output.Text = "Nespárován žádný MS Band!";
    return;
  }

  using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
  {
    int tileCapacity = await bandClient.TileManager.GetRemainingTileCapacityAsync();

    if (tileCapacity<1)
    {
      output.Text = "Nedostatečná kapacita volných slotů v náramku!";
      return;
    }
    //přidání dlaždice do Bandu
if (await bandClient.TileManager.AddTileAsync(CreateTile(nazev))) 
    {
      output.Text = "Přidána dlaždice: " + nazev;
    }
  }
}
catch (BandException ex)
{
  output.Text = "zachycena výjimka: " + ex.Message;
}

public BandTile CreateTile(String nazev)
{
  // vytvoření small tile ikony (24x24px)
  WriteableBitmap smallIconBitmap = new WriteableBitmap(24, 24);
  BandIcon smallIcon = smallIconBitmap.ToBandIcon();

  // vytvoření ikony (Band1: 46x46px, Band2: 48x48px)
  WriteableBitmap tileIconBitmap = new WriteableBitmap(46, 46);
  BandIcon tileIcon = tileIconBitmap.ToBandIcon();

  Guid tileGuid = Guid.NewGuid(); //identifikátor

  BandTile tile = new BandTile(tileGuid)
  {
    IsBadgingEnabled = true,   // povolit badging (počet nepřečtených zpráv)
    Name = nazev,
    SmallIcon = smallIcon,
    TileIcon = tileIcon
  };
  return tile;
}

Výpis dlaždic aplikace

try
{
  IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();

  if (pairedBands.Length < 1)
  {
    output.Text = "Nespárován žádný MS Band!";
    return;
  }

  using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
  {
    IEnumerable<BandTile> tiles = await bandClient.TileManager.GetTilesAsync();

    output.Text = "Dlaždice:";

    foreach (var item in tiles)
    {
      output.Text += "\n" + item.Name;
    }
  }
}
catch (BandException ex)
{
  output.Text = "zachycena výjimka: " + ex.Message;
}

Vývoj pro Band (2) - zjištění HW a FW verze

Jednoduché zjištění verze HW a FW MS Bandu


string fwVersion;
string hwVersion;

try
{
      IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();

      if (pairedBands.Length < 1) //CHYBA
      {                   
              return;
      }

       // HW a FW version
      using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
      {
               fwVersion = await bandClient.GetFirmwareVersionAsync();
               hwVersion = await bandClient.GetHardwareVersionAsync();
       }
}
catch (BandException ex)
{
       // handle a Band connection exception
}




Senzory přístupné přes SDK


Akcelerometr (accelerometer)

Poskytuje informace o zrychlení (pro osy X, Y a Z) v jednotkách G (1g = 9,81 m/s2)
Vlastnosti:
  • AccelerationX (double)
  • AccelerationY (double)
  • AccelerationZ (double) 

Gyroskop (gyroscope)

Poskytuje úhlovou rychlost na osách X, Y a Z ve stupních za sekundu (° / sec).
Vlastnosti:
  • AngularVelocityX (double) 
  • AngularVelocityY (double)
  • AngularVelocityZ (double)

Vzdálenost (distance)

Vlastnosti:
  • CurrentMotion (MotionType) - aktuální režim krokoměru (enum MotionType) 
  • Pace (float) - aktuální tempo v milisekundách na metr (ms/m) 
  • Speed (float) - aktuální rychlost v centimetrech za sekundu (cm/s)
  • TotalDistance (long) - celkovou vzdálenost v centimetrech od posledního factory resetu 

enum MotionType: 
  • Unknown - zatím neznámé
  • Idle - nečinnost
  • Walking - chůze
  • Jogging - jogging
  • Running - běh

Srdeční rytmus (heart rate)

Vlastnosti:
  • HeartRate (int) -  počet tepů za minutu
  • Quality (HeartRateQuality) - kvalita snímání..

enum HeartRateQuality:
  • Acquiring - Band se snaží získat srdeční frekvenci
  • Locked - Band snímá správně

Krokoměr (pedometer)

Poskytuje celkový počet kroků, od posledního "factory-resetu". Pro stanovení konkrétnějších výsledků je potřeba udělat rozdíl hodnot.
Vlastnosti:
  • TotalSteps (long) - celkový počet kroků

Teplota pokožky (skin temperature)

Vlastnosti:
  • Temperature (double) - teplota ve stupních Celsia

UV

Zobrazuje UV záření.
Vlastnosti:
  • IndexLevel (UVIndexLevel) - aktuální hodnota UVIndexLevel 

enum UVIndexLevel: 
  • None - velice nízký UV index level 
  • Low - nízký UV index level 
  • Medium - střední UV index level 
  • High - vysoký UV index level 
  • VeryHigh- velmi vysoký UV index level

Kontakt (band contact)

Informace zda je aktuálně Band nasazen.
Vlastnosti:
  • State (BandContactState) - ...

enum BandContactState:
  • NotWorn - nenasazen
  • Unknown - neznámé
  • Worn - nenasazen

Kalorie (calories)

Poskytuje celkový počet spálených kalorií, od posledního "factory-resetu". Pro stanovení konkrétnějších výsledků je potřeba udělat rozdíl hodnot.
Vlastnosti:
  • Calories (long) - počet spálených kilokalorií od posledního factory resetu

Senzory pouze pro MS Band 2


Galvanický odpor pokožky (galvanic skin response) 

Vlastnosti:
  • Resistance (int) - informace o aktuálním odporu pokožky nositele v kohms

RR Interval 

Poskytuje interval v sekundách mezi dvěma posledními komorovými komplexy (vzdálenost na elektrokardiogramu -zkracuje se při zrychlení srdeční frekvence, prodlužuje při zpomalení).
Vlastnosti:
  • Interval (double) - poslední RR interval v sekundách

Okolní světlo (ambient light)

Poskytuje informace o aktuální intenzitě světla ("osvětlenosti") v luxech.
Vlastnosti:
  • Brightness (int) - aktuální intenzita světla v lumenech na metr čtverečný (lux)  

Barometr (barometer)

Informace o aktuálním tlaku vzduchu v hPa (hektopascalech) a teplotě ve stupních Celsia.
Vlastnosti:
  • AirPressure (double) - aktuální tlak vzduchu v hPa 
  • Temperature (double) - aktuální teplota ve stupních Celsia

Výškoměr (altimeter)

Poskytuje aktuální data o "nadmořské výšce"
Vlastnosti:
  • FlightsAscended (long) - počet nastoupaných pater od posledního factory resetu
  • FlightsDescended  (long) - počet sestoupaných pater od posledního factory resetu
  • Rate (float) - aktuální hodnota stoupání/klesání v cm/s
  • SteppingGain (long) - celkový výstup (chůze) od posledního factory resetu v centimetrech
  • SteppingLoss (long) - celkový sestup (chůze) od posledního factory resetu v centimetrech
  • StepsAscended (long) - celkový výstup (chůze) od posledního factory resetu v krocích
  • StepsDescended (long) - celkový sestup (chůze) od posledního factory resetu v krocích
  • TotalGain (long) - celkový výstup od posledního factory resetu v centimetrech
  • TotalLoss  (long) - celkový sestup od posledního factory resetu v centimetrech


Vývoj pro Band (1) - připojení k MS Band


Po vytvoření nového projektu ve Visual Studiu 2015 (nebo 2013) - File - New - Project - Blank App (Universal Windows) musíme přidat do appxmanifestu Capabilities Bluetooth abychom mohli v aplikaci bluetooth používat. 


Dále přidáme NuGet balíček Microsoft.Band, jednoduchým způsobem klikneme pravým tlačítkem na References - Manage NuGet Packages..


Dáme vyhledat "band" a nainstalujeme jej.


Po vložení namespaců:

using Microsoft.Band;

using Microsoft.Band.Notifications; //zde pro vibraci



se již můžeme pustit do samostatného připojení, kdy po spojení s náramkem necháme band jednou zavibrovat.

try
{
   IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();



   if (pairedBands.Length < 1)
   {
      //CHYBA
      return;
   }
   // Connect to Microsoft Band.
   using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))

   {
      await bandClient.NotificationManager.VibrateAsync(VibrationType.NotificationOneTone);
   }
}
catch (BandException ex)
{
    // handle a Band connection exception
}


Po spuštění aplikace musíme potvrdit připojení:


A zavibrování náramku potvrdí, že vše funguje jak má.

Microsoft Health

MS Health je nejdůležitější aplikací pro MS Band, jelikož veškeré nastavování náramku probíhá právě přes tuto aplikaci. Navíc lze v aplikaci zobrazit veškeré aktivity naměřené náramkem, které se navíc synchronizují na web https://dashboard.microsofthealth.com/.


Web Tiles aplikace

Web Tiles je jednoduchý způsob vytvoření aplikace pro MS Band, jedná se prakticky o webovou RSS čtečku přímo v náramku. Aplikaci vytvoříte pomocí průvodce na stránkách https://developer.microsoftband.com/WebTile aplikaci si poté stáhnete a otevřete v telefonu, který ji automaticky pomocí aplikace Microsoft Health nahraje do MS Bandu.


Průvodce

Na stránce https://developer.microsoftband.com/WebTile zvolíte Get Started.


Na další stránce zvolíte typ a rozložení aplikace.



Můžete zvolit 3 základní typy:
  • Single page - pouze jedna stránka.
  • Multiple page tile - až 7 stránek horizontálně umístěných vedle sebe.
  • Feed tile - ideální pro RSS - vhodné pokud je v XML souboru více stejných uzlů, které chcete zobrazit na jednotlivých stránkách.

Dále zvolíte jeden z 6 znázorněných rozložení.

V dalším kroku pouze vyberete zdroj dat pro vaši aplikaci - adresu XML souboru.



Dále pak pomocí drag&drop přetáhnete z XML souboru do aplikace požadované data. V případě multiple page tile pomocí tlačítka "+" přidáváte další stránky (celkem až 7). Také je možné u XML přidat další zdroj dat. U feed tile vyberete data pouze na jednu stránku, ostatní stránky budou vytvořeny automaticky.




Na následující stránce lze nastavit notifikace a jejich pravidla. Notifikaci přidáte kliknutím na "+" a nastavíte pro ni podmínku.



Nakonec vyberete barevné schéma, vyplníte základní informace o aplikaci a vyberete jí ikonu.



Poté již můžete svou aplikaci uložit nebo ji nahrát do "Gallery" pomocí Submit my tile





Dokumentace:
https://developer.microsoftband.com/Content/docs/Microsoft%20Band%20Web%20Tile%20Documentation.pdf

Články:
http://developer.telerik.com/featured/create-a-microsoft-band-app-with-web-tiles/
http://blog.devmatter.com/my-first-band-web-tile/
http://gdgtarena.com/customize-your-microsoft-band-with-web-tiles/