AntonioPelleriti.it [aka z9]

I code, therefore I am

NAVIGATION - SEARCH

Enum.GetValues in Windows Phone 7.x

 

Per ottenere l'elenco dei valori di un'enumerazione, ove non è disponibile l'apposito metodo GetValues (o GetNames) di Enum, per esempio in Windows Phone 7, possiamo implementare un metodo che sfrutta la Reflection ed ottiene lo stesso risultato:

public static List<T> GetEnumValues<T>()
        {
            List<T> values = new List<T>();
            foreach (var x in typeof(T).GetFields())
            {
                if (x.IsLiteral)
                {
                    values.Add((T)Enum.Parse(typeof(T), x.Name, false));
                }
            }
            return values;
        }

a questo punto possiamo invocarlo come segue:

var values=GetEnumValues<MyEnum>();


Windows Phone: WebBrowser e Javascript non vanno d'accordo?

Windows Phone fornisce un controllo WebBrowser utilizzabile nelle proprie app, per esempio per visualizzare pagine e siti internet, o per creare applicazioni ibride, con un misto di interfaccia XAML ed il resto appunto HTML/Javascript.

Il controllo WebBrowser ha delle limitazioni rispetto a quello di sistema, ed inoltre le funzionalità supportate dipendono anche dalla versione del sistema opeativo. 

In Windows Phone 7.1 è basato su Internet Explorer 9, mentre il controllo per Windows Phone 8 si basa su Internet Explorer 10, ed in Windows Phone 8.1 abbiamo infine il supporto di Internet Explorer 11.

A causa di queste differenze anche il contenuto visualizzato al suo interno può variare fra le differenti versioni dei sistemi operativi.

Il controllo permette anche di renderizzare contenuto che fa uso di javascript (Jquery & co sono ormai omnipresenti...), in questo caso però è necessario impostare a true l'apposita proprietà IsScriptEnabled, da code behind o direttamente da XAML.

webBrowser.IsScriptenabled=true;

 

In genere questo è sufficiente.

Purtroppo nella pratica mi è capitato di aver a che fare con una pagina html di un cliente, che faceva largo uso di Javascript, e che sul controllo WebBrowser non aveva intenzione di funzionare come funzionava su un normale browser.

Dopo vari googlamenti, tentativi, ricerche su StackOverflow e forum vari, ho scoperto che aggiungendo alla pagina HTML in questione la dichiarazione doctype di HTML 5, il tutto funzionava a meraviglia:

<!DOCTYPE html>
<html>
...

Quindi se vi capita, provate a risolvere così.

 

Windows Phone 8.1 e la simulazione di push notification

Il nuovo emulatore di Windows Phone messo a disposizione dal Windows Phone SDK 8.1, permette di testare in maniera molto semplice e produttiva applicazioni che debbano fare uso di push notification, senza dover implementare la parte server di invio di queste ultime.

Il nuovo emulatore mette a disposizione nuovi strumenti, che appariranno come tab nella finestra Additional Tools, attivabile cliccando sulle freccette dell'emulatore stesso. Fra le novità vi è appunto la tab Notifications, come potete notare dall'immagine seguente:

 

Appena mi sono accorto di questa nuova funzione, ho provato subito ad utilizzarla, e devo dire che l'utilizzo stesso non è stato immediato (probabilmente la tarda ora aveva fatto brutti scherzi)! Quindi ho deciso di scrivere questo post, per aiutare chi dovesse incontrare le stesse difficoltà.

Innanzitutto c'è da dire che per testare tale funzionalità, l'app dovrà prevedere la gestione delle push notification, visualizzando magari delle notifiche Toast, aggiornando le tile con testi, immagini, badge, e così via.

Proviamo quindi a fare subito un semplice esempio pratico. Avviate Visual Studio 2013 (con Update 2 RC installato), e create un nuovo progetto Windows Phone (va bene sia un progetto Windows Phone Store App, quindi basato sulla nuova architettura Windows Runtime, che un progetto Windows Phone Silverlight 8.1, tanto l'importante è poter utilizzare il nuovo emulatore).

Dopo aver creato il progetto, dobbiamo innanzitutto impostare l'app in maniera che essa possa visualizzare delle Toast Notifications. Quindi basta fare doppio click sul file Package.appxmanifest, e nella sezione Notifications, impostare il valore Yes in corrispondenza della voce Toast Capable.

 

A questo punto, è necessario ottenere un canale sul quale viaggeranno le push notification dal Windows Push Notification Service verso l'app, e quindi al caricamento della pagina principale, all'interno del gestore delll'evento Loaded, ho inserito il seguente codice:

private async void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

            channel.PushNotificationReceived += (s, args) => { Debug.WriteLine(args.NotificationType); };
            Debug.WriteLine(channel.Uri.ToString());
        }

Esso crea un oggetto channel, e vi associa un gestore per l'evento PushNotificationReceived (in questo caso gestito inline con una espressione lambda, ma tanto lo utilizzeremo solo per stampare una stringa di debug) e stampa nella finestra di debug l'Uri del canale appena creato.

Il progetto, per lo scopo che ci siamo prefissi, cioè quello di testare il nuovo tool per le notifications, è finito.

Quindi ho avviato il debug, ho aperto gli additional tools, ho abilitato la checkbox Simulation, ed ho cercato di inviare una notifica push simulata. Semplice, ma troppo bello per essere vero: non funzionava!

In realtà, il tool stesso indica la strada corretta da seguire: Enable Simulation, then redeploy and launch the push app to get the channel URI.

In parole povere, basta seguire la seguente procedura:

  1. avviare la prima volta l'app e quindi l'emulatore
  2. aprire i tools e abilitare la checkbox Simulation
  3. interrompere il debug
  4. lanciare nuovamente l'app
  5. cliccare il pulsante refresh per ottenere il channel URI

Ora è possibile scegliere una tipologia di notifica, modificare eventualmente il template, e inviarle all'app cliccando il pulsante Send.

La seguente immagine mostra una Toast Notification appena ricevuta dall'app sull'emulatore, le stesse notifiche sono mostrate naturalmente anche all'interno del nuovo Action Center introdotto da Windows Phone 8.1.

 

 

Listbox con scrolling orizzontale in Windows Phone/Windows 8

Per realizzare una ListBox con scrolling in orizzontale basta modificare tramite codice XAML l'ItemsPanelTemplate utilizzato dal controllo standard.

Il primo accorgimento è quindi quello di utilizzare uno StackPanel (o VirtualizingStackPanel se preferite) con Orientation Horizontal e quindi impostare le proprietà ScrollViewer.HorizontalScrollBarVisibility="Auto" e Scrollviewer.VerticalScrollBarVisibility="Disabled".

<ListBox ItemsSource="{Binding MieiDati}" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto" 
      Scrollviewer.VerticalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
        <itemspanelTemplate>
            <StackPanel Orientation="Horizontal">
        </StackPanel ></itemspaneltemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>            
            <TextBlock Style="{StaticResource PhoneTextExtraLargeStyle}" 
             Text="{Binding Name}">
        </TextBlock ></DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Articolo: La nuova frontiera del wireless, la tecnologia NFC

Su IoProgrammo numero 185 (Maggio/Giugno 2013), trovate il mio articolo sulla programmazione di dispositivi Windows Phone 8 w/o Windows 8 dotati di chip NFC per la comunicazione wireless.

Titolo di copertina:

LA NUOVA FRONTIERA DEL WIRELESS! 
Le API mobile e desktop di Microsoft per far comunicare due dispositivi fisicamente vicini utilizzando la tecnologia NFC

Rilasciato Windows Phone SDK 7.1 Beta 2, kit di sviluppo per Windows Phone Mango

Con un post sul blog ufficiale http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/06/29/developers-get-goody-basket-full-of-mangos.aspx, Microsoft ha annunciato la disponibilità della Beta 2 degli strumenti Windows Phone Developer Tools per Mango Beta 2, la nuova versione di Windows Phone (7.1), che per la precisione adesso si non si chiameranno più WPDT ma  Windows Phone SDK 7.1 Beta 2.

Novità della beta 2

  • Profiler – Profiling della interfaccia grafica e  del codice di un app.
  • Emulator – più veloce e stabile.
  • Isolated Storage Explorer – accesso all'isolated storage di un'applicazione sull'emulatore o su un dispositivo fisico.
  • Advertising SDK – incluso ora nell'SDK, anche se utilizzabile solo negli USA.