SVILUPPARE PER MICROSOFT BAND
Preview:
Citation preview
- 1. Template designed by Massimo Bonanni
massimo.bonanni@tiscali.it http://codetailor.blogspot.com
@massimobonanni Sviluppare per Microsoft Band
- 2. Slide con sponsor che arriva a qualche giorno dalla
conferenza sponsor
- 3. MASSIMO BONANNI Software architect e trainer @ eXagile
(Roma) Microsoft MVP dal 2011 Intel Software Innovator dal 2014
Fondatore di DomusDotNet (www.domusdotnet.org) e dotNet{podcast}
(www.dotnetpodcast.com) chi sono
- 4. Cos Microsoft Band Microsoft Band SDK Connettersi ad un Band
Accesso ai Sensori Tile, Notifiche e Page WebTile Conclusioni
Agenda
- 5. 10 Gyroscope 10 Wearable Device 10 sensori Schermo Touch Cos
Microsoft Band
- 6. Health & Fitness Livello di attivit e frequenza cardiaca
Passi, calorie, distanza percorsa Esposizione ai raggi UV Durata
del sonno, efficienza, frequenza di risvegli e frequenza cardiaca a
riposo Allenamenti guidati. Produttivit: Interazione con centro
notifiche Mail, SMS, Facebook, Twitter Chiamate in arrivo
Integrazione con Cortana Cos Microsoft Band
- 7. Consente alle applicazioni di estendere e potenziare
lesperienza utente sfruttando il Microsoft Band. 3 modi principali
per interagire Flusso di dati provenienti dai sensori Creare Tile e
Layout interattivi Personalizzare temi e colori Microsoft Band NON
esegue codice applicativo Microsoft Band fornisce un modello di
estensione, non una piattaforma applicativa richiesto un
Telefono/Tablet/PC Microsoft Band e un dispositivo di input e un
display ausiliario Disponibile per Windows, iOS e Android Windows
Phone 8.1 e successivi Windows 8.1 e successivi (Store Apps) iOS 7
e successivi Android 4.2 (API 17) e successivi Microsoft Band SDK
http://developer.microsoftband.com/
- 8. Requisiti minimi: Visual Studio 2013 o successive In caso di
Windows Phone, e necessario installare Windows Phone SDK add-on per
Visual Studio (gia presente nei VS 2013 con update 2 o successivi).
Si aggancia alla nostra app tramite NuGet. Deve essere aggiunta la
capability bluetooth.rfcomm nel manifest Deve essere impostata la
capability Proximity nel manifest Microsoft Band SDK
- 9. Il Band deve essere in pairing con il device. La classe
BandClientManager fornisce accesso ai Band: GetBandsAsync: fornisce
lelenco dei Band visibili (IBandInfo) ConnectAsync: esegue la
connessione ad un Band specifico (IBandClient) Connettersi ad un
Band BandInfo = (await
BandClientManager.Instance.GetBandsAsync()).FirstOrDefault(); if
(BandInfo != null) BandClient = await
BandClientManager.Instance.ConnectAsync(BandInfo);
- 10. IBandClient fornisce accesso a tutte le funzionalit esposte
da un singolo Band Connettersi ad un Band - IBandClient Notifiche
Personalizzazione Sensori Tile e pagine
- 11. Il device (ad es. Phone) deve essere connesso al Band. Si
ottiene una eccezione se viene persa la connessione. Alcuni sensori
richiedono il consenso esplicito dellutente (ad es. Heart Rate).
Luso prolungato dello streaming ha effetto sul consumo di batteria
Accesso ai sensori Sensore Dettagli misurazione Heart Rate BPM,
qualita lettura Accelerometer Accelerazione (in unita g) lungo gli
assi X, Y e Z Gyroscope Velocita angolare (in gradi al secondo)
lungo gli assi X, Y e Z Distance Distanza totale (cm), velocita (in
cm/s), passo (in ms/m) e stato Pedometer Numero totale dei passi
Skin Temp Temperatura della pelle (in gradi Celsius) UV Intensita
dellesposizione UV (numero di screto di valori) Band Contact Band
indossato o meno Calories Numero totale di calorie
- 12. Laccesso ai sensori avviene attraverso IBandSensorManager.
IBandSensorManager espone una propriet (di tipo IBandSensor) per
ogni sensore. Per alcuni sensori possibile variare lintervallo di
reporting. IBandSensor prevede un approccio ad eventi. Il sensore
di contatto prevede anche la possibilit di eseguire polling.
Accesso ai sensori
- 13. Gli step necessari per poter ottenere i dati da un sensore
sono: 1. Verificare il consenso dellutente e, eventualmente,
richiederlo 2. Sottoscrivere levento ReadingChanged 3. Avviare lo
stream dei dati Accesso ai sensori if
(BandClient.SensorManager.HeartRate.GetCurrentUserConsent() ==
UserConsent.Granted)
BandClient.SensorManager.HeartRate.ReadingChanged +=
HeartRate_ReadingChanged; if
(BandClient.SensorManager.HeartRate.GetCurrentUserConsent() !=
UserConsent.Granted) await
BandClient.SensorManager.HeartRate.RequestUserConsentAsync(); await
BandClient.SensorManager.HeartRate.StartReadingsAsync()
- 14. Levento ReadingChanged permette di gestire i dati
caratteristici del sensore Accesso ai sensori private async void
HeartRate_ReadingChanged(object sender, BandSensorReadingEventArgs
e) { txtHeartRateValue.Text = e.SensorReading.HeartRate.ToString();
txtHeartRateQuality.Text = e.SensorReading.Quality.ToString();
txtHeartRateTimestamp.Text = e.SensorReading.Timestamp.ToString();
}
- 15. DEMO Sensori
- 16. Ogni app pu creare una o pi Tile nella strip del Band. La
strip supporta fino a 13 tile. Ogni Tile pu avere: una icona di
dimensioni 46px x 46px una icona piccola 24px x 24px (utilizzata
quando vi sono notifiche) un titolo o un nome per la tile un GUID
identificativo della tile Un tema per la tile (di default viene
preso quello del Band) Ogni Tile pu avere, al suo interno fino a 8
pagine, ognuna delle quali pu contenere messaggi con layout
predefinito o pagine con layout custom. Le icone devono essere
alpha-blended (non sono supportati i colori) Tile
- 17. Le tile vengono gestite tramite la ITileManager esposta
dalla IBandClient Tile Aggiunge una nuova tile alla strip del Band
Restituisce il numero degli slot disponibili per le tile della
strip del band Restituisce lelenco delle tile aggiunte
dallapplicazione Rimuove una tile dalla strip del Band
- 18. Una tile modellata dalla classe BandTile. Tile var TileGuid
= new Guid("42356072-8168-47AC-A78A-1E0B280EC3FB"); var tile = new
BandTile(TileGuid); tile.Name = "Mia Tile"; tile.IsBadgingEnabled =
true; var icon = await BitmapFactory.New(1, 1) .FromContent(new
Uri("ms-appx:///Assets/LargeTile.png")); tile.TileIcon =
icon.ToBandIcon(); var smallIcon = await BitmapFactory.New(1, 1)
.FromContent(new Uri("ms-appx:///Assets/SmallTile.png"));
tile.SmallIcon = smallIcon.ToBandIcon();
- 19. 1. Verificare che la tile non sia gi presente: 2.
Verificare che vi sia ancora spazio negli slot della strip: 3.
Aggiungere la tile: Aggiungere una Tile var tiles = await
BandClient.TileManager.GetTilesAsync(); var appTile =
tiles.FirstOrDefault(t => t.TileId == TileGuid); var
tileCapacity = await
BandClient.TileManager.GetRemainingTileCapacityAsync(); if
(tileCapacity > 0) { // Aggiungere la tile } if (await
BandClient.TileManager.AddTileAsync(tile)) await ShowMessage("Tile
creata con successo"); else await ShowMessage("Errore nella
creazione della Tile");
- 20. Le tile vengono gestite tramite la IBandNotificationManager
esposta dalla IBandClient Messagge: una notifica, inviata ad una
tile particolare, composta da un titolo e da un testo che rimane
memorizzata nel device (in una pagina della tile). Il message pu
generare un avvertimento o meno (haptics); Dialog: una notifica,
inviata ad una tile particolare, composta da un titolo e da un
testo ma non rimane memorizzata tra i messaggi della tile e genera
sempre un avvertimento per lutente ( un vero e proprio dialog);
Haptics: una notifica di tipo vibrazione inviata al Band. Notifiche
Invia un messagio al Band Visualizza un dialog sul band Invia un
Haptics al Band
- 21. 1. Ricavare lid della Tile a cui inviare la notifica: 2.
Inviare la notifica alla Tile: Inviare una Notifica var tiles =
await BandClient.TileManager.GetTilesAsync(); var appTile =
tiles.FirstOrDefault(t => t.TileId == TileGuid); await
BandClient.NotificationManager.ShowDialogAsync(appTile.TileId,
"Dialog Title", "Dialog Message"); await
BandClient.NotificationManager.SendMessageAsync(appTile.TileId,
"Message Title", "Message", DateTimeOffset.Now,
MessageFlags.None);
- 22. Le pagine custom vengono gestite tramite la ITileManager
esposta dalla IBandClient Pagine custom Rimuove una pagina custom
da una Tile Imposta una pagina custom in una Tile Avvia la
ricezione degli eventi generati dalle tile e dalle pagine Ferma la
ricezione degli eventi generati dalle tile e dalle pagine Eventi
generati dalle tile e dalle pagine
- 23. Ogni tile pu ospitare fino a 8 pagine (standard o custom).
Quando lutente tappa sulla tile, viene mostrata la prima pagina.
Ogni tile pu avere 5 differenti layout. Ciascuna delle pagine pu
utilizzare uno dei 5 layout. Pagine custom
- 24. Il layout di una pagina composto da: Elementi primitivi
TextBlock, WrappedTextBlock, Icon, Barcode, TextButton,
FilledButton Container FlowPanel, ScrollFlowPanel, FilledPanel I
container possono essere innestati tra loro (eccetto per il
FilledPanel che puo essere utilizzato solo come root). Possono
essere definite fino a 8 icone da utilizzare nel controllo Icon
oltre le icone utilizzate per la tile. Ogni element della pagina e
individuabile grazie ad un ElementId Pagine custom
- 25. Creare un page layout ScrollFlowPanel panel = new
ScrollFlowPanel { Rect = new PageRect(0, 0, 245, 102), Orientation
= FlowPanelOrientation.Horizontal }; panel.Elements.Add(new
TextButton() { ElementId = (short)LayoutElementId.YesButton, Rect =
new PageRect(0, 0, 100, 50), PressedColor = new BandColor(0xFF,
0x00, 0x00), Margins = new Margins(5, 0, 5, 0) });
panel.Elements.Add(new TextButton() { ElementId =
(short)LayoutElementId.NoButton, Rect = new PageRect(0, 0, 100,
50), PressedColor = new BandColor(0xFF, 0x00, 0x00), Margins = new
Margins(5, 0, 5, 0) }); PageLayout layout = new PageLayout(panel);
ScrollFlowPanel TextButton YesButton TextButton NoButton
- 26. Per aggiungere una pagina ad una tile sufficiente: 1.
Aggiungere i layout alla collezione dei layout (fino a 5)
utilizzabili per le pagine: 2. Creare il PageData (il pacchetto che
come riempire la pagina): 3. Impostare la pagina: Aggiungere una
pagina alla Tile var pageLayout = CreatePageLayout();
tile.PageLayouts.Add(pageLayout); var pageData = new
PageData(MainPageId, (short)PageLayoutId.MainPageIndex, new
TextButtonData((short)LayoutElementId.YesButton, "Yes"), new
TextButtonData((short)LayoutElementId.NoButton, "No")); if (await
BandClient.TileManager.SetPagesAsync(tile.TileId, pageData)) await
ShowMessage("Pagina aggiunta con successo!"); else await
ShowMessage("Pagina non aggiunta!");
- 27. Il PageData definisce come riempire i controlli presenti in
un layout. Values e una collezione di PageElementData Ogni elemento
primitivo ha un Data Struttura del PageData
- 28. Linterfaccia IBandTileManager espone i tre eventi:
TileOpened: viene sollevato quando lutente tappa su una tile;
TileClosed: viene sollevato quando lutente preme il bottone back;
TileButtonPressed: viene sollevato quando lutente preme un bottone
in una pagina della tile. Largomento degli eventi fornisce il Guid
della Tile che ha generato levento, il Guid della pagina e il Guid
del bottone. Registrati i gestori di evento, sufficiente attivare
linvio degli eventi con il metodo StartReadingAsync(). Gestire
linterazione utente BandClient.TileManager.TileOpened +=
EventHandler_TileOpened; BandClient.TileManager.TileClosed +=
EventHandler_TileClosed; BandClient.TileManager.TileButtonPressed
+= EventHandler_TileButtonPressed; await
BandClient.TileManager.StartReadingsAsync();
- 29. DEMO Tile
- 30. Personalizzare il tema impostando opportunamente i colori.
Cambiare limmagine di sfondo della Me Tile Personalizzazione
- 31. La personalizzazione e gestita dallinterfaccia
IBandPersonalizationManager Immagine MeTile: Tema:
Personalizzazione var meTileImage = await
BandClient.PersonalizationManager.GetMeTileImageAsync(); await
BandClient.PersonalizationManager.SetMeTileImageAsync(meTileImage);
var bandTheme = await
BandClient.PersonalizationManager.GetThemeAsync(); await
BandClient.PersonalizationManager.SetThemeAsync(bandTheme);
- 32. DEMO Temi
- 33. Microsoft Band SDK http://developer.microsoftband.com/
Microsoft Band Official Site
https://www.microsoft.com/microsoft-band Build2015 - Microsoft
Band: Developing for Microsoft Band and Microsoft Health
http://channel9.msdn.com/Events/Build/2015/2-619 Riferimenti
- 34. Grazie a tutti per la partecipazione Riceverete il link per
il download a slide e demo via email nei prossimi giorni Per
contattarmi massimo.bonanni@tiscali.it Grazie