예제 #1
0
        /// <summary>
        /// Populates the page with content passed during navigation.  Any saved state is also
        /// provided when recreating a page from a prior session.
        /// </summary>
        /// <param name="sender">
        /// The source of the event; typically <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Event data that provides both the navigation parameter passed to
        /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested and
        /// a dictionary of state preserved by this page during an earlier
        /// session.  The state will be null the first time a page is visited.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            Debug.WriteLine("LoadState");
            // If a hardware Back button is present, hide the "soft" Back button
            // in the command bar, and register a handler for presses of the hardware
            if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
            {
                HardwareButtons.BackPressed += HardwareButtons_BackPressed;
                Debug.WriteLine("HWButtonTypeIsPresent");
            }

            //var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
            GeolocationAccessStatus status = await Geolocator.RequestAccessAsync();
            if (status == GeolocationAccessStatus.Allowed)
            {
                settingsLink.Visibility = Visibility.Collapsed;
                bool goToInitState = false;
                //if a saved state is found, read the values and update the state
                if (e.PageState != null)
                {
                    if (e.PageState.ContainsKey("avg_start_position_lat") && (double)e.PageState["avg_start_position_lat"] != 0
                        && e.PageState.ContainsKey("avg_start_position_lon") && (double)e.PageState["avg_start_position_lon"] != 0
                        && e.PageState.ContainsKey("avg_start_position_alt") && e.PageState.ContainsKey("avg_start_position_accuracy")
                        && e.PageState.ContainsKey("result_m") && e.PageState.ContainsKey("result_ft"))
                    {
                        // check if start position is too old
                        if (e.PageState.ContainsKey("start_position_timestamp"))
                        {
                            DateTime oldTime = new DateTime();
                            bool parseOK = DateTime.TryParse((string)e.PageState["start_position_timestamp"], out oldTime);

                            // if parse succesful, set timestamp, if not, set it to now
                            if (parseOK)
                            {
                                start_position_timestamp = oldTime;
                            }
                            else
                            {
                                start_position_timestamp = DateTime.Now;
                            }

                            long difference = DateTime.Now.Ticks - oldTime.Ticks;
                            TimeSpan differenceSpan = new TimeSpan(difference);
                            Debug.WriteLine("difference: " + differenceSpan.TotalHours + "h " + differenceSpan.TotalMinutes + "min " + differenceSpan.TotalSeconds + "sec");

                            if (differenceSpan.TotalHours < MAX_START_POSITION_AGE_IN_HOURS)
                            {
                                Debug.WriteLine("start_position not too old");

                                avg_start_position.Latitude = (double)e.PageState["avg_start_position_lat"];
                                avg_start_position.Longitude = (double)e.PageState["avg_start_position_lon"];
                                avg_start_position.Altitude = (double)e.PageState["avg_start_position_alt"];
                                avg_start_point_accuracy = (double)e.PageState["avg_start_position_accuracy"];
                                result_m = (double)e.PageState["result_m"];
                                result_ft = (double)e.PageState["result_ft"];


                                Debug.WriteLine("page state restored");
                                Debug.WriteLine("LoadState - result_m: " + result_m + " result_ft: " + result_ft);
                                progressBar.Visibility = Windows.UI.Xaml.Visibility.Visible;
                                statusLbl.Text = RESUMING;
                                setStartBtn.IsEnabled = false;
                                setGeolocatorToReportState();
                            }
                            else
                            {
                                // start position was too old -> 
                                goToInitState = true;
                            }
                        }
                    }
                    else
                    {
                        goToInitState = true;
                        // avg start position is zero
                        //Debug.WriteLine("start position was zero");
                    }
                }
                // no saved state, launching first time
                else
                {
                    goToInitState = true;
                    Debug.WriteLine("no saved state, to init state");

                }
                if (goToInitState)
                {
                    setGeolocatorToInitState(STARTING_GPS, true, true);
                }
                setLabels();

            }
            else
            {
                Debug.WriteLine("no location consent");
    
                // The app is not allowed to location
                setStartBtn.IsEnabled = false;
                statusLbl.Text = LOCATION_OPTED_OUT;
                settingsLink.Visibility = Visibility.Visible;
                //var msg = new MessageDialog(LOCATION_CONSENT_QUESTION);
                //var okBtn = new UICommand("yes", new UICommandInvokedHandler(CommandHandler));
                //var cancelBtn = new UICommand("no", new UICommandInvokedHandler(CommandHandler));
                //msg.Commands.Add(okBtn);
                //msg.Commands.Add(cancelBtn);
                //IUICommand result = await msg.ShowAsync();
            }
        }
예제 #2
0
 /// <summary>
 /// Populates the page with content passed during navigation.  Any saved state is also
 /// provided when recreating a page from a prior session.
 /// </summary>
 /// <param name="sender">
 /// The source of the event; typically <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Event data that provides both the navigation parameter passed to
 /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested and
 /// a dictionary of state preserved by this page during an earlier
 /// session.  The state will be null the first time a page is visited.</param>
 private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
 }