как отключить службы определения местоположения в моем приложении WP7

#windows-phone-7 #geolocation

#windows-телефон-7 #геолокация

Вопрос:

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

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

Вот viewmodel, в котором я объявил geocoordinatewatcher.

 общедоступный MainViewModel() 
 { 
 geoWatcher = новый GeoCoordinateWatcher();
если (geoWatcher.TryStart(false, TimeSpan.FromSeconds(30))== false) 
 { MessageBox.Показать("Службы определения местоположения отключены для этого приложения. Мы не можем обнаружить близлежащие остановки. Чтобы снова включить службы определения местоположения, перейдите на страницу настроек.", "Предупреждение", MessageBoxButton.ОК); } 
 } 

 частный геокоординатный наблюдатель geoWatcher; 


 общественный геокоординатный наблюдатель GeoWatcher 
 { 
 получить 
 { 
 вернуть геоватчер; 
 } 
 установить 
 { 
 если (geoWatcher != значение) 
 { 
 geoWatcher = значение; 
 NotifyPropertyChanged("GeoWatcher"); 
 } 
 если(geoWatcher.Статус== Геопозиционный статус.Отключен) 
 { 
 Геоватчер.Стоп();
} 
 } 

 } 

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

 общедоступная страница настроек () 
 { 
 InitializeComponent(); 

 если (App.ViewModel.GeoWatcher.Статус == Геопозиционный статус.Готово) 
 { 
 locToggle.IsChecked = true; 
 locToggle.Содержимое = "Включено"; 
 } 

 ещё 
 { 
 locToggle.IsChecked = false; 
 locToggle.Содержимое = "Выкл."; 

 } 
 } 

 установлен флажок private void (отправитель объекта, RoutedEventArgs e) 
 { 
 locToggle.Содержимое = "Включено"; 
 App.ViewModel.GeoWatcher.Запустить (); 
 Окно сообщений.Показать ("это статус"   App.ViewModel.GeoWatcher.Статус.toString(), "Info", MessageBoxButton.OK); // для отладки 

 } 

 частный void toggleUnchecked(отправитель объекта, RoutedEventArgs e) 
 { 
 locToggle.Содержимое = "Выкл."; 
 App.ViewModel.GeoWatcher.Стоп(); 
 Окно сообщений.Показать ("это статус"   App.ViewModel.GeoWatcher.Статус.toString(), "Info", MessageBoxButton.OK); // для отладки 
 } 


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

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

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

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

Спасибо!

Ответ №1:

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

 if(settings.LocationAllowed)
  {all your code for using location}
 

Ответ №2:

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

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