#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:
Вероятно, вам следует принять во внимание несколько факторов / моментов, большинство из которых у вас есть. В любом случае, вы можете найти это полезным.
- Переключатель настроек вашего приложения должен отображаться только при включении службы определения местоположения на устройстве
GeoPositionStatus
это простоEnum
файл, который содержит типы статусов.StatusChanged
это событие, которое необходимо обработать для проверки изменений в настройках устройства. Посмотрите это.- Вы не можете изменить настройки устройства из приложения.
- Добавьте обработчики событий перед вызовом
start
наблюдателя.