как отключить службы определения местоположения в моем приложении WP7 - PullRequest
1 голос
/ 31 октября 2011

Я делаю приложение для Windows Phone, которое отображает, где находятся ближайшие автобусные станции (помимо прочего). Для Windows Phone требуются приложения, позволяющие пользователям отключать службы определения местоположения в приложении.

Итак, я добавил переключатель на странице настроек, но он, похоже, ничего не делает.

Вот модель представления, в которой я объявил наблюдателя геокоординаты.


    public MainViewModel() 
            { 
                geoWatcher = new GeoCoordinateWatcher(); 
                if (geoWatcher.TryStart(false, TimeSpan.FromSeconds(30)  )==false ) 
                { MessageBox.Show("The location services are disabled for this app. We can't detect the nearby stops. To turn location services back on, go to the settings page.", "Warning", MessageBoxButton.OK); } 
            } 

            private GeoCoordinateWatcher geoWatcher; 


            public GeoCoordinateWatcher GeoWatcher 
            { 
                get 
                { 
                    return geoWatcher; 
                } 
                set 
                { 
                    if (geoWatcher != value) 
                    { 
                        geoWatcher = value; 
                        NotifyPropertyChanged("GeoWatcher"); 
                    } 
                    if(geoWatcher.Status== GeoPositionStatus.Disabled) 
                    { 
                        geoWatcher.Stop(); 
                    } 
                } 

            } 

и вот основная часть страницы настроек


            public SettingsPage() 
            { 
                InitializeComponent(); 

                if (App.ViewModel.GeoWatcher.Status == GeoPositionStatus.Ready) 
                { 
                    locToggle.IsChecked = true; 
                    locToggle.Content = "On"; 
                } 

                else 
                { 
                    locToggle.IsChecked = false; 
                    locToggle.Content = "Off"; 

                } 
            } 

            private void toggleChecked(object sender, RoutedEventArgs e) 
            { 
                locToggle.Content = "On"; 
                App.ViewModel.GeoWatcher.Start(); 
                MessageBox.Show("this is the status " + App.ViewModel.GeoWatcher.Status.ToString(), "Info", MessageBoxButton.OK); //for debugging 

            } 

            private void toggleUnchecked(object sender, RoutedEventArgs e) 
            { 
                locToggle.Content = "Off"; 
                App.ViewModel.GeoWatcher.Stop(); 
                MessageBox.Show("this is the status " + App.ViewModel.GeoWatcher.Status.ToString(), "Info", MessageBoxButton.OK); //for debugging 
            } 


Когда я выключаю тумблер, щелкаю на странице настроек и возвращаюсь к ней, тумблер снова включается.

Я попытался добавить в окно сообщения функции для отладки, но в статусе всегда указано «Готово», и мое приложение по-прежнему использует службы определения местоположения, даже когда я переключаю переключатель в положение «Выкл.

Есть ли что-то, что я должен добавить к коду, чтобы тумблер должным образом заставил мое приложение прекратить использовать службы определения местоположения в моем приложении, если оно отключено на странице настроек? Или я должен проверять что-то еще, кроме GeoPositionStatus? Я не мог найти способ заставить мое приложение действительно изменять разрешения служб определения местоположения или PositionStatus.

Я посмотрел на эту страницу здесь , но все еще растерялся, поскольку следовал примеру внизу страницы, но безрезультатно. Я искал StackOverflow, но я не мог найти похожий вопрос с WP. Я также опубликовал это на форумах AppHub.

Спасибо!

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Вы, вероятно, должны принять во внимание несколько факторов / точек, большинство из которых у вас есть. В любом случае, вы можете найти это полезным.

  1. Переключатель настроек вашего приложения должен отображаться только при включении службы определения местоположения на устройстве
  2. GeoPositionStatus - это просто Enum, который содержит типы статусов.
  3. StatusChanged - это событие, которое необходимо обработать, чтобы проверить наличие изменений в настройках устройства. Смотрите это.
  4. Вы не можете изменить настройки устройства из приложения.
  5. Добавьте обработчики событий перед вызовом start в наблюдателе.
1 голос
/ 31 октября 2011

В вашей MainViewModel вам нужно проверить, разрешили ли они службы определения местоположения, прежде чем использовать geocoordinatewatcher.

if(settings.LocationAllowed)
  {all your code for using location}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...