Passa ai contenuti principali

Microsoft Band SDK Preview–Tile

In questo post dedicato alla Preview dell’SDK DI Microsoft Band ci occuperemo delle funzionalità relative alla gestione delle tile sullo smartwatch.

L’interfaccia IBandClient, tra le proprietà che espone e che ci consentono di accedere alle funzionalità del Band, espone anche la TileManager il cui nome è, evidentemente, tutto un programma.

image

La proprietà TileManager è un’ istanza dell’interfaccia IBandTileManager che, a sua volta espone, 4 operazioni:
  • AddTileAsync : permette di aggiungere (ove ce ne fosse spazio) una tile all’interno della stripe delle tile del Band;
  • GetRemainingTileCapacityAsync: restituisce il numero di posizioni disponibili all’interno della stripe delle tile del Band. Se non c’è più posto otterremo il valore 0;
  • GetTilesAsync: restituisce l’elenco delle tile aggiunte alla stripe del Band da parte della nostra applicazione;
  • RemoveTileAsync: rimuove una tile dalla stripe delle tile del Band.
Prima di entrare nel merito delle operazioni offerte dall’interfaccia IBandTileManager, diamo un’occhiata all’oggetto Tile del Band.

image

Come possiamo vedere dalla precedente figura una tile è composta da:
  • TileId: un guid che identifica univocamente la tile e che ci consentirà di gestire le notifiche alla tile stessa;
  • Name: una stringa che definisce il nome della tile;
  • IsBadgingEnabled: indica se la tile può visualizzare il numero di notifiche ricevute o meno;
  • SmallIcon e TileIcon: rappresentano rispettivamente l’immagine della tile quando appare il numero delle notifiche e l’immagine della tile in visualizzazione normale. La TileIcon è obbligatoria, la SmallIcon no;
  • Theme: permette di impostare un tema particolare per la tile.
Le immagini che possiamo utilizzare nelle tile debbono essere monocolore (bianche) con trasparenza e debbono avere dimensioni 46x46 pixel per la TileIcon e 24x24 pixels per la SmallIcon.

image

Inoltre le due immagini debbono essere istanze della classe BandIcon. Questa classe non ha costruttore ma fortunatamente l’SDK del Band ci mette a disposizione un paio di metodi di estensione per poter convertire una WriteableBitmap in una BandIcon e viceversa:

Dim bitmap As WriteableBitmap=New WriteableBitmap(46,46)
' WriteableBitmap --> BandIcon
Dim bandIcon as BandIcon = bitmap.ToBandIcon()
' BandIcon --> WriteableBitmap
Dim newBitmap=bandIcon.ToWriteableBitmap()

Nel pezzo di codice seguente viene mostrato come creare una Tile con delle immagini memorizzate nell’asset dell’applicazione:

Public Shared Async Function CreateStandardTileAsync(tileName As String, isBadgingEnabled As Boolean) As Task(Of BandTile)
    Dim tile = New BandTile(Guid.NewGuid())
    
    tile.Name = tileName
    tile.IsBadgingEnabled = isBadgingEnabled
    Dim icon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconLarge.png"))
    Dim smallIcon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconSmall.png"))
    tile.TileIcon =  icon.ToBandIcon()
    tile.SmallIcon = smallIcon.ToBandIcon()

    Return tile
End Function

In questo caso si e’ utilizzato il package WriteableBitmapEx, disponibile su NuGet, per poter avere a disposizione la classe BitmapFactory.

GetRemainingTileCapacityAsync

L’operazione GetRemainingTileCapacityAsync, dell’interfaccia IBandTileManager, ci permette di sapere quanti “posti” sono disponibili per le nostre tile.

Try
    Dim tileCapacity = Await App.CurrentBandClient.TileManager.GetRemainingTileCapacityAsync()
    RemainingTileCapacityText.Text = tileCapacity.ToString()
Catch ex As BandException

End Try

Nell’esempio precedente App.CurrentBandClient è un’istanza valida di IBandClient che possiamo ottenere, come visto nei precedenti post della serie, connettendoci ad un Band.
Se non ci sono slot disponibili per le tile, il risultato della chiamata al metodo è il valore 0.
La nostra app dovrebbe sempre controllare, prima di aggiungere una tile, che ci sia posto in modo da evitare di generare eccezione nel momento in cui si tenta di aggiungere una nuova tile.

GetTilesAsync

Il metodo GetTilesAsync permette di recuperare l’elenco delle BandTile che la nostra app ha aggiunto al Band.

Try
    Dim tiles = Await App.CurrentBandClient.TileManager.GetTilesAsync()
    TileList.ItemsSource = tiles
Catch ex As BandException

End Try

La collezione non conterrà alcun elemento se non abbiamo mai aggiunto tile.

AddTileAsync

Il metodo AddTileAsync permette di aggiungere una tile alla stripe delle tile del Band (se ci sono posti liberi).

Try
    If Await App.CurrentBandClient.TileManager.AddTileAsync(tile) Then
        Dim msgDlg = New MessageDialog("Tile added!!")
        Await msgDlg.ShowAsync()
        NavigationHelper.GoBack()
    End If
Catch ex As Exception

End Try

Se non ci sono posti liberi e tentiamo di aggiungere una tile, otteniamo un’eccezione di tipo InvalidOperationException.
Se, invece, abbiamo spazio per inserire la tile, il sistema mostrerà all’utente la finestra di conferma (attualmente non bypassabile) mostrata nella seguente figura:

SNAGHTML53355a7


RemoveTileAsync

Il metodo RemoveTileAsync permette la rimozione di una tile dalla stripe delle tile del Band. Il metodo accetta sia una tile (magari recuperata utilizzando il metodo GetTilesAsync esposto in precedenza), sia il guid di una tile.

Try
     If Await App.CurrentBandClient.TileManager.RemoveTileAsync(tile) Then
         Dim msgDlg = New MessageDialog("Tile removed!!")
         Await msgDlg.ShowAsync()
     End If
 Catch ex As Exception

 End Try

Se la tile (o il guid della tile) non esiste, il metodo restituisce false. Se la rimozione avviene con successo, il metodo restituisce true.

Cambiare il tema della tile

E’ possibile impostare un tema differente rispetto a quello del Band nel momento in cui si aggiunge una tile, semplicemente valorizzando la proprieta’ Theme dell’istanza di BandTile.

Public Shared Async Function CreateStandardTileAsync(tileName As String, isBadgingEnabled As Boolean) As Task(Of BandTile)
    Dim tile = New BandTile(Guid.NewGuid())
    
    tile.Name = tileName
    tile.IsBadgingEnabled = isBadgingEnabled
    Dim icon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconLarge.png"))
    Dim smallIcon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconSmall.png"))
    tile.TileIcon =  icon.ToBandIcon()
    tile.SmallIcon = smallIcon.ToBandIcon()

    Return tile
End Function

Public Shared Async Function CreateRedTileAsync(tileName As String, isBadgingEnabled As Boolean) As Task(Of BandTile)
    Dim tile = Await CreateStandardTileAsync(tileName, isBadgingEnabled)
    tile.Theme=New Personalization.BandTheme()
    With tile.Theme
        .Base=Colors.Red.ToBandColor()
        .HighContrast=Colors.blueviolet.ToBandColor()
        .Highlight=Colors.blueviolet.ToBandColor()
        .SecondaryText=Colors.LightGray.ToBandColor()
        .Muted=Colors.DarkRed.ToBandColor()
        .Lowlight=Colors.DarkRed.ToBandColor()
    End With

    Return tile
End Function

Nell’esempio precedente viene impostato il tema della tile valorizzando opportunamente i colori. Il significato dei colori è riportato nella seguente figura.

image

La classe BandTheme (che vedremo dettagliatamente in un successivo post) una proprieta’ per ogni colore del tema. Queste proprietà sono di tipo BandColor, una struttura proprietaria dell’SDK del Band. Anche in questo caso abbiamo un metodo di estensione (il metodo ToBandColor) che ci consente di convertire un colore espresso con la classe Windows.UI.Color nella struttura BandColor corrispondente.

Nell’attuale versione dell’SDK sembrerebbe che il colore Base (cioè quello dello sfondo dell’icona non venga preso in considerazione).

Vedremo in un post apposito i dettagli sulla personalizzazione del Band e su come usare l’SDK per impostare il tema del device.

Il codice sorgente dell’esempio usato in questo post è disponibile al seguente link.

Rimanete connessi!!!


Commenti

Post popolari in questo blog

VB.NET for Dummies: Gli Eventi

Vorrei iniziare con questo post una serie dedicata ad aspetti di VB.NET di base che possono essere utile a coloro che si avvicinano al mondo .NET e che, in genere, non vengono trattati a livello base. La serie di post non ha la pretesa di essere assolutamente esaustivi sugli argomenti che tratterò In questo primo post parleremo degli eventi. Cosa sono e a cosa servono Un evento è la “notifica” dell’accadimento di qualcosa. Quando, ad esempio, premiamo un bottone della finestra di un’applicazione, dietro le quinte, il bottone stesso “notifica” al mondo circostante che qualcuno, in quell’istante, lo ha premuto. Sta, poi, al mondo circostante preoccuparsi di “intercettare” l’evento stesso per gestirlo (tramite un gestore di evento). Attenzione a non confondere la pressione del tasto con la “notifica” della pressione del tasto: l’evento è la “notifica” dell’accadimento, non l’accadimento stesso. Ma a cosa serve tutto ciò? Utilizzare gli eventi è un modo per disaccoppiare

VB.NET: SplashScreen con effetto fade-in

In questo post vorrei proporvi un modo per realizzare una splash screen per le nostre applicazioni Windows Form che appare progressivamente con un effetto fade. Supponiamo di avere il nostro progetto VB.NET in una soluzione Visual Studio 2008 in cui abbiamo il sorgente della nostra applicazione Windows Form. Inseriamo una splash screen utilizzando il menù Progetto->Aggiungi Nuovo Elemento e selezionando il tipo di elemento “Schermata Iniziale” A questo punto Visual Studio creerà, automaticamente, la schermata iniziale che possiamo personalizzare graficamente come vogliamo. Per poter fare in modo che questa finestra appaia nel momento in cui avviamo l’applicazione, è necessario aprire le proprietà del progetto e impostare la maschera di avvio: In questo modo, all’avvio dell’applicazione, la schermata appare immediatamente e scompare un attimo prima della visualizzazione della finestra dell’applicazione. Possiamo far apparire la schermata iniziale con un ef

Alla scoperta del Kinect: presentazioni e convenevoli

Oggi è arrivato un Kinect nuovo nuovo su cui cominciare a fare sperimentazione ed ho, quindi, deciso di condividere tutto ciò che scopro, le cavolate che faccio e i segreti che scopro con chi mi segue. I post che cercherò di scrivere con frequenza sono post di un neofita che si avvicina all’”Aggeggio” e che quindi sono diretti a chi nulla dell’argomento. Gli esperti troveranno noiosi e banali questi post, ma non si può aver tutto dalla vita. Per cominciare, scartato l’”Aggeggio” ho cominciato a preparare l’ambiente di sviluppo: 1) Visual Studio 2010 Ultimate (che uso normalmente ma che non è necessario in quanto si può sviluppare tranquillamente con la express edition); 2) Kinect SDK, scaricabile all’indirizzo http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx 3) DirectX Software Development Kit scaricabile all’indirizzo http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812 A questo punto vi basta connettere il Kinect al