Cambiare la startup page nelle applicazioni WP7

Sto modificando la mia app per WP7 che riporta le previsioni dell’Osmer del Friuli Venezia Giulia.

Essendo una applicazione che recupera in tempo reale le informazioni dal sito, mi sono trovato a gestire il caso della mancanza di connettività.

La prima (brutta) soluzione è stata intercettare alla apertura della View principale l’assenza di connettività e mostrare un messaggio all’utente prima di… lasciare “crashare elegantemente” l’applicazione Perplesso

Con la prossima versione l’utente, in mancanza di una qualsiasi connettività, verrà re-diretto al una View che gli notificherà il problema, altrimenti aprirà la View principale.

Come fare tutto questo:

1) Nel “WMAppManifest.xml” bisogna cambiare la NavigationPage verso una inesistente pagina:

    <Tasks>
      <DefaultTask Name="_default" NavigationPage="DummyPage.xaml" />
    </Tasks>

2) Nel costruttore della app aggiungo una chiamata alla routine di redirezione:

        /// <summary>
        /// Constructor for the Application object.
        /// </summary>
        public App()
        {
            // Global handler for uncaught exceptions. 
            UnhandledException += Application_UnhandledException;

            // Standard Silverlight initialization
            InitializeComponent();

            // Phone-specific initialization
            InitializePhoneApplication();

            ManageStartPageRedirection();

           // .... 

3) Questa è la routine che gestisce la re-direzione utilizzando l’UriMapper:

        private void ManageStartPageRedirection()
        {
            var mapper = new UriMapper();
            string uriString = string.Empty;
            if (PhoneUtility.HasInternetConection)
            {
                uriString = "/Views/MainPage.xaml";
            }
            else
            {
                uriString = "/Views/NoConnectionPage.xaml";
            }
            mapper.UriMappings.Add(new UriMapping
            {
                Uri = new Uri("/DummyPage.xaml", UriKind.Relative),
                MappedUri = new Uri(uriString, UriKind.Relative)
            });
            this.RootFrame.UriMapper = mapper;
        }

4) Per completezza la verifica della connettività viene fatta con la seguente riga di codice Occhiolino

    public class PhoneUtility
    {
        public static bool HasInternetConection
        {
            get
            {
                return (NetworkInterface.NetworkInterfaceType != NetworkInterfaceType.None);
            }
        }
    }

Se intanto volete provare la app e lasciare qualche feedback, la cosa sarà ben accetta. Occhiolino

Update: mi sono dimenticato di menzionare la fonte di cotale inspirazione (mica avrete pensato che fosse farina del mio sacco vero? A bocca aperta )… eccola qui.

Tag di Technorati: ,,
«luglio»
domlunmarmergiovensab
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234