Можно ли проверить, активны ли службы определения местоположения? - PullRequest
7 голосов
/ 03 февраля 2011

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

Я имею в виду Настройки> Местоположение> Услуги определения местоположения

Вероятно, нет прямого API для вызова, но может ли он работать с GeoCoordinateWatcher?

Ответы [ 5 ]

4 голосов
/ 22 октября 2012
            GeoCoordinateWatcher g = new GeoCoordinateWatcher();
            g.Start();
            if (g.Permission.Equals(GeoPositionPermission.Granted))
            {
                //Your location services is enabled. Go ahead.
                //Your codes goes here.
            }
            else if (g.Permission.Equals(GeoPositionPermission.Denied) || g.Permission.Equals(GeoPositionPermission.Unknown))
            {                    
                MessageBox.Show("Location services are disabled. To enable them, Goto Settings - Location - Enable Location Services.", "Location services", MessageBoxButton.OK);
            }
3 голосов
/ 03 февраля 2011

Даже при запущенном GeoCoordinateWatcher вы получите NoData, если датчик отключен. Вместо этого попробуйте использовать TryStart:

GeoCoordinateWatcher g = new GeoCoordinateWatcher();
MessageBox.Show(g.TryStart(false,TimeSpan.FromSeconds(30)).ToString());

Если возвращается False, это означает, что датчик отключен. Если он возвращает True, он включен. Установите соответствующий период ожидания (в приведенном выше фрагменте кода я использую 30 секунд) и делегируйте этот процесс вторичному потоку, чтобы пользовательский интерфейс не зависал.

3 голосов
/ 03 февраля 2011

Вы можете использовать следующий код для определения статуса службы определения местоположения:

var watcher = new GeoCoordinateWatcher();
if (GeoPositionStatus.Disabled == watcher.Status)
{
    // Watcher is disabled.
}

Более реалистично, вы захотите уделять больше внимания изменению статуса (если служба не отключена, это не значит, что у вас есть данные о местоположении), поэтому вы должны взглянуть на * 1004. * Документация MSDN для работы со службой определения местоположения.

Существует также хорошая публикация о фильтрации и эмуляции данных о местоположении с использованием расширений Reactive , которая идеально подходит для тестирования перед устройством, хотя для экономии времени на этом фронте Widnows Phone Team выпустили Эмулятор GPS для Windows Phone .

2 голосов
/ 20 апреля 2011

Вы можете добавить событие StatusChanged в свой GeoCoordinateWatcher и проверить GeoPositionPermission.Denied в разрешениях при его запуске.

watcher = new GeoCoordinateWatcher();
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
watcher.Start();

void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{

     if (watcher.Permission == GeoPositionPermission.Denied)
     {
         // Location services were disabled
     }
 }

Надеюсь, это поможет.

0 голосов
/ 01 июня 2014

Сделано на основе Тедж ответ .

public override void OnNavigatedTo()
    {            
        using (var watcher = new GeoCoordinateWatcher())
        {
            try
            {
                watcher.Start();
            }
            finally
            {
                IsAllowedInSystem = watcher.Permission.Equals(GeoPositionPermission.Granted);
                watcher.Stop();
            }
        }
    }

И мои приложения ToggleSwitch.IsEnabled привязаны к IsAllowedInSystem. Когда я переключаюсь на Службу определения местоположения , отключаю ее и возвращаюсь обратно в приложение, мой ToggleSwitch отключается (также строка «Пожалуйста, включите Службу определения местоположения в настройках системы» виден). Когда я переключаюсь на Служба определения местоположения , включаю его и возвращаюсь обратно в мое приложение, мой ToggleSwitch включается и пользователь может настроить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...