Windows Phone: avviare funzionalità del device con i launchers
a cura di Alessandro Del Sole (requisiti: conoscenza di XAML)Introduzione
Se avete un telefono con Windows Phone sapete che ci sono alcune importanti funzionalità a disposizione come l'app per le telefonate, il client per la gestione delle email, l'invio degli sms, le mappe di Bing, il lettore multimediale, Internet Explorer e molte altre.
Quando si creano applicazioni per dispositivi mobili è sovente necessario accedere a funzionalità come quelle menzionate; mentre in altri sistemi operativi (incluso il "vecchio" Windows Mobile) attivare determinate funzionalità a volte richiede molte linee di codice, in Windows Phone tutto questo è estremamente semplificato grazie alla presenza dei c.d. launchers.
I launcher sono rappresentati da classi messe a disposizione dal namespace Microsoft.Phone.Tasks e ognuna di esse rappresenta l'accesso a una delle funzionalità del dispositivo. Ad esempio, la classe BingMapsTask permette di accedere da codice alle mappe di Bing impostando anche un indirizzo da cercare.
L'elenco completo dei launcher è disponibile in questa pagina MSDN con relative spiegazioni, ad ogni buon conto li riepiloghiamo come segue:
BingMapsDirectionsTask permette di attivare le mappe di Bing e di ottenere automaticamente le indicazioni stradali per le coordinate specificate BingMapsTask permette di attivare le mappe di Bing e di cercare l'indirizzo specificato ConnectionSettingsTask consente di accedere alle impostazioni delle connessioni di rete EmailComposeTask permette di attivare il client di posta elettronica specificando indirizzi dei destinatari e corpo dell'email MarketPlaceDetailsTask consente di aprire il Market Place puntando alla pagina dedicata all'applicazione specificata tramite il suo ID MarketPlaceHubTask consente di aprire il Market Place o per le app o per la musica MarketPlaceReviewTask consente di aprire il Market Place puntando alla pagina delle recensioni per l'app specificata tramite ID MarketPlaceSearchTask consente di aprire la pagina di ricerca nel Market Place MediaPlayerLauncher permette di attivare il lettore multimediale sull'indirizzo specificato PhoneCallTask consente di attivare la funzionalità telefono specificando un numero da chiamare e il nome da visualizzare SearchTask cerca sul Web i termini specificati attraverso la funzionalità di ricerca integrata ShareLinkTask consente di condividere sui social network collegati il link desiderato ShareStatusTask consente di condividere un messaggio personale sui social network collegati SmsComposeTask attiva la funzionalità SMS preimpostando numero e corpo del messaggio WebBrowserTask permette di aprire Internet Explorer puntando all'indirizzo specificato Ciascun launcher ha un metodo Show, che va invocato dopo aver assegnato le proprietà di interesse. Inoltre, il nome di ogni launcher termina con il suffisso Task proprio a ricordare il namespace da cui sono esposti (eccezion fatta per il MediaPlayerLauncher che è l'unico il cui nome termina in modo diverso).
In questo articolo faremo una panoramica sull'uso dei launcher più comuni. Per quanto riguarda i vari launcher relativi al Market Place, per praticità ne esamineremo solo uno poichè l'utilizzo degli altri sarà decisamente similare e la pagina MSDN precedentemente indicata fornisce i relativi dettagli. Il codice a corredo dell'articolo è disponibile in area Download di Visual Basic Tips & Tricks.
Il grande vantaggio derivante dall'utilizzo dei task è che non c'è alcuna necessità di implementare dei controlli utente o delle pagine apposite per sfogliare determinati contenuti. Per esempio, non ha alcun senso implementare un controllo utente che definisca un MediaElement per creare un riproduttore multimediale dal momento che è possibile sfruttare il Media Player integrato nel dispositivo (a meno, ovviamente, di specifiche esigenze).
Preparazione del progetto di esempio
Il progetto dimostrativo viene creato sfruttando il modello chiamato Windows Phone Application in Visual Studio 2010.
L'interfaccia grafica è assai banale ed è costituita da un elenco di pulsanti, ognuno dei quali andrà ad attivare uno specifico launcher. Detti pulsanti sono contenuti in uno StackPanel, a sua volta incluso in uno ScrollViewer. Quest'ultimo consentirà di scorrere con il dito sul dispositivo (o col mouse sull'emulatore) l'elenco di tutti i pulsanti.
Ciò premesso, nel file di codice XAML relativo alla pagina principale del progetto eliminiamo il contenitore Grid chiamato ContentPanel ed aggiunto di default da Visual Studio, sostituendolo con il seguente codice:<ScrollViewer x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel> <Button Width="250" Margin="5" Name="IEButton" Click="IEButton_Click">Internet Explorer</Button> <Button Width="250" Margin="5" Name="MPButton" Click="MPButton_Click">Media Player</Button> <Button Width="250" Margin="5" Name="BingButton" Click="BingButton_Click">Bing Maps</Button> <Button Width="250" Margin="5" Name="BingDirectionsButton" Click="BingDirectionsButton_Click">Bing Directions</Button> <Button Width="250" Margin="5" Name="ConnectionButton" Click="ConnectionButton_Click">Connection</Button> <Button Width="250" Margin="5" Name="EmailButton" Click="EmailButton_Click">Email</Button> <Button Width="250" Margin="5" Name="CallButton" Click="CallButton_Click">Phone call</Button> <Button Width="250" Margin="5" Name="SearchButton" Click="SearchButton_Click">Search</Button> <Button Width="250" Margin="5" Name="SmsButton" Click="SmsButton_Click">SMS</Button> <Button Width="250" Margin="5" Name="StatusButton" Click="StatusButton_Click">Share Status</Button> <Button Width="250" Margin="5" Name="LinkButton" Click="LinkButton_Click">Share Link</Button> <Button Width="250" Margin="5" Name="MarketButton" Click="MarketButton_Click">Hub</Button> </StackPanel> </ScrollViewer>Per ciascun pulsante deve essere definito un gestore di evento Click, all'interno del quale verrà scritto il codice che avvia il relativo launcher.
Avvio dei launcher
Cominciamo col descrivere i launcher esaminando il più semplice, ossia il WebBrowserTask che permette di attivare Internet Explorer. Ecco il codice:Private Sub IEButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim browserTask As New WebBrowserTask browserTask.Uri = New Uri("http://www.microsoft.com", UriKind.Absolute) browserTask.Show() End SubLa peculiarità di questo launcher è l'assegnazione della sua proprietà Uri con un oggetto di tipo System.Uri che punti all'indirizzo Web specificato. Ecco il risultato nell'emulatore:
![]()
Il launcher successivo è quello che attiva il Media Player ed è chiamato MediaPlayerLauncher:
Private Sub MPButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim mediaTask As New MediaPlayerLauncher mediaTask.Media = New Uri("http://www.tuosito.com/tuovideo.wmv", UriKind.Absolute) mediaTask.Show() End SubE' molto simile al precedente, nel senso che anche in questo caso si utilizza un oggetto System.Uri ma la proprietà da assegnare si chiama Media. Si noti che questo launcher è utilizzabile per video streaming, ma ogni video deve essere referenziato sotto forma di Uri. Vista la specificità degli indirizzi assegnabili, non viene mostrato uno screen shot.
Il successivo launcher è il BingMapsTask che attiva le mappe di Bing. Ecco il codice:Private Sub BingButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim bingTask As New BingMapsTask bingTask.SearchTerm = "Roma, Italy, via del Corso" bingTask.Show() End SubCome vedete è sufficiente assegnare la proprietà SearchTerm con l'indirizzo da cercare, per poi invocare il metodo Show che attiverà la mappa direttamente sull'indirizzo specificato:
![]()
Simile a questo è il BingMapsDirectionsTask, che però richiede la specifica di due posizioni Start ed End. Se Start non viene specificato, la posizione attuale rilevata tramite GPS viene utilizzata per default. Ecco un esempio:
Private Sub BingDirectionsButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim bingDirections As New BingMapsDirectionsTask Dim colosseo As New LabeledMapLocation("Colosseo", Nothing) bingDirections.End = colosseo bingDirections.Show() End SubLe proprietà Start ed End vanno assegnate con istanze della classe LabeledMapLocation, il cui costruttore riceve un termine di ricerca come primo argomento e le coordinate in geolocation come secondo argomento. Quest'ultimo può essere passato come Nothing in modo che solo il termine di ricerca specificato nel primo argomento venga utilizzato.
Il launcher successivo è quello relativo alle connessioni di rete. Consideriamo il seguente esempio:Private Sub ConnectionButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim connectionSettingsTask As ConnectionSettingsTask = New ConnectionSettingsTask() connectionSettingsTask.ConnectionSettingsType = ConnectionSettingsType.WiFi connectionSettingsTask.Show() End SubQuesto produrrà, come risultato, l'output della seguente figura:
![]()
L'enumerazione ConnectionSettingsType stabilisce quale connessione vada gestita; valori supportati sono AirPlaneMode, BlueTooth, Cellular e WiFi.
Il launcher successivo è forse uno dei più importanti poichè attiva una funzionalità di grande interesse, ossia l'invio di email. Il codice è simile al seguente:Private Sub EmailButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim emailTask As New EmailComposeTask emailTask.To = "diego.cattaruzza@visual-basic.it" emailTask.Subject = "Messaggio da Mango" emailTask.Cc = "antonio.catucci@visual-basic.it" emailTask.Body = "Vi invio questa email dalla mia applicazione" emailTask.Show() End SubL'utilizzo di EmailComposeTask non richiede particolari spiegazioni, va aggiunto che esiste anche la proprietà Bcc per l'invio di email in copia nascosta. E' bene sottolineare che questo codice non invia automaticamente l'email, poichè l'invio è fatto a mano all'interno del client. Di questo launcher non è fornito uno screen shot poichè nell'emulatore non è impostabile un account di default.
Prendiamo ora in considerazione il launcher chiamato PhoneCallTask che, come il nome lascia intendere, attiva l'uso della chiamata telefonica. Ecco un esempio:Private Sub CallButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim callTask As New PhoneCallTask callTask.PhoneNumber = "+391122333" callTask.DisplayName = "Supporto tecnico" callTask.Show() End SubNel momento in cui il launcher viene visualizzato verrà dapprima richiesta conferma sull'avvio della telefonata. Come vedete è semplicissimo impostare il numero di telefono da chiamare e un nome da visualizzare per la chiamata:
![]()
Anche cercare su Internet è facilissimo, grazie al launcher chiamato SearchTask:
Private Sub SearchButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim searchTask As New SearchTask searchTask.SearchQuery = "visual basic" searchTask.Show() End SubI termini da ricercare sono contenuti nella proprietà SearchQuery. Si noti come la ricerca vada a recuperare anche eventuali applicazioni che corrispondono ai termini specificati:
![]()
Anche l'invio di sms è una caratteristica molto richiesta nelle applicazioni per dispositivi e in Windows Phone attivarla è davvero semplice usando SmsComposeTask:
Private Sub SmsButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim smsTask As New SmsComposeTask smsTask.To = "+391122333" smsTask.Body = "Ci vediamo stasera?" smsTask.Show() End SubAnche in questo caso le proprietà da assegnare sono molto intuitive. Ecco il risultato:
![]()
In Windows Phone grande importanza è data all'integrazione con i più noti social network. Per tale ragione è possibile condividere facilmente link o il proprio status personale attraverso due appositi launcher: ShareLinkTask e ShareStatusTask. Ecco un loro esempio d'uso:
Private Sub StatusButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim statusTask As New ShareStatusTask statusTask.Status = "Sto sviluppando un'app" statusTask.Show() End Sub Private Sub LinkButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim shareLink As New ShareLinkTask shareLink.LinkUri = New Uri("www.visual-basic.it", UriKind.Absolute) shareLink.Title = "Visual Basic Tips & Tricks" shareLink.Message = "Dal 1996 la community italiana su Microsoft Visual Basic" End SubAnche in questo caso le proprietà da assegnare sono veramente semplici da capire. E' opportuno ricordare che i social network con cui è integrato Windows Phone sono Windows Live, Facebook, Twitter e Linkedin.
L'ultimo launcher che prendiamo in considerazione si chiama MarketPlaceHubTasks e consente di aprire il Market Place dedicato alle app o alla musica:Private Sub MarketButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Dim marketHubTask As New MarketplaceHubTask marketHubTask.ContentType = MarketplaceContentType.Applications marketHubTask.Show() End SubLa tipologia di contenuto (app/musica) è stabilita tramite la proprietà ContentType, il cui valore è costituito da uno dei valori dell'enumerazione MarketPlaceContentType (Application o Music):
![]()
Gli altri launcher relativi al Market Place, elencati all'inizio dell'articolo, non verranno trattati, ma il loro utilizzo è decisamente simile a quest'ultimo. La documentazione MSDN vi sarà di aiuto per capire come utilizzarli.
Conclusioni
I launcher costituiscono una grande opportunità nello sviluppo per Windows Phone, perché da un lato ci risparmiano il tempo necessario a creare appositi controlli, consentendoci di utilizzare direttamente funzionalità del sistema operativo, mentre dall'altro lato ci consentono di arricchire le nostre applicazioni con funzionalità particolarmente richieste.
Per ulteriori informazioni potete contattarmi al mio indirizzo di posta elettronica o visitare il mio blog.