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: Convertire un file DOC in RTF e PDF con office interop

In questo post vorrei proporvi del codice per poter convertire un file .doc in un file .rtf oppure .pdf utilizzando le API di interoperabilità di Office.Creeremo una classe, DocConverter, che esporrà le due funzionalità sopra citate.Cominciamo con il prevedere un attributo privato della classe che rappresenterà l’applicazione Word che utilizzeremo per la conversione. Creeremo l’istanza dell’attributo privato all’interno del costruttore della classe:PublicSubNew()
IfNot CreateWordApp() Then
ThrowNew ApplicationException("Assembly di interoperabilità con Office non trovato!")
EndIf
EndSub
Private _wordApp As Word.ApplicationClass
ProtectedFunction CreateWordApp() AsBoolean
Dim retval = True
Try
_wordApp = New Word.ApplicationClass()
_wordApp.Visible = False
Catch ex As System.Exception
_wordApp = Nothing
retval = False
EndTry
Return retval
EndFunction

La conversione del file doc sarà effettuata aprendo il file stesso ed eseguendo un’operazione di SaveAs:

Pr…

Tascam DR-05 registratore digitale per tutti

Diverso tempo fa ho acquistato il registratore digitale Tascam DR-05 e, ora, dopo diversi mesi di utilizzo, posso dire la mia a proposito.

Si tratta di un ottimo registratore digitale con microfono stereo che permette di ottenere registrazioni di ottima qualitaà anche in ambienti non perfetti dal punto di vista acustico.

Interessante la possibilità di utilizzare un cavalletto di piccole dimensioni come HAMA Mini treppiede o Mini Cavalletto Universale per tenere il microfono sollevato dal tavolo in fase di registrazione grazie allàattacco universale per macchina fotografica che il microfono ha nella parte inferiore.

Da segnalare anche il menu’ ben fatto e la possibilita’ di utilizzare una scheda SD esterna per memorizzare i file audio. Anche a livello di consumo batterie non e’ niente male. Consiglio l’uso delle alcaline non ricaricabili.

Il mio utilizzo e’ stato prettamente di registrazione di podcast vocali (no musica) ma le recensioni confermano che se la cava egregiamente con la mu…

Cambiare la lingua di Visual Studio 2008

Oggi ho avuto qualche problema installando Windows Mobile 6 Professional SDK Refresh e Windows Mobile 6 Standard SDK Refresh.Scaricati i file di installazione e installati, ho provato a creare un progetto di tipo Windows Mobile 6.0 e mi sono beccato questo errore:Dopo qualche smanettamento abbiamo scoperto (e ringrazio il mitico Matteo per l’aiuto) che il mio Visual Studio 2008, pur essendo in Inglese (prova ne era il fatto che gli hotfix e la SP installata erano nella lingua di Albione) aveva come lingua impostata quella del sistema operativo (italiano).Ovviamente, non avrebbe mai potuto trovare la cartella 1040 (italiano) visto che l’installazione dell’SDK aveva supposto che la lingua del Visual Studio fosse Inglese (1033).La soluzione del problema è duplice:1) Duplicate la cartella 1033 presente nel percorso evidenziato dall’errore e la rinominate 10402) cambiate la lingua di Visual Studio.Per questa ultima eventualità basta andare nel menù Strumenti/Opzioni:e cambiare il linguaggi…