Событие изменения GeolocationAccessStatus не возникает

Я разрабатываю мобильное приложение для Windows с использованием Windows 10 SDK (сборка 10586), и мне нужно подписаться на событие StatusChanged Geolocator.

Проблема в том, что когда я отключаю геолокацию с помощью меню «Настройки»> «Местоположение», мой метод OnStatusChanged не вызывается.

    public async Task StartTracking()
    {
        // Request permission to access location
        var accessStatus = await Geolocator.RequestAccessAsync();

        switch (accessStatus)
        {
            case GeolocationAccessStatus.Allowed:
                _geolocator = new Geolocator
                {
                    ReportInterval = 2000,
                    MovementThreshold = 10d,
                    DesiredAccuracyInMeters = 10,
                    DesiredAccuracy = PositionAccuracy.High
                };
                _geolocator.PositionChanged += OnPositionChanged;
                _geolocator.StatusChanged += OnStatusChanged;
                break;

            case GeolocationAccessStatus.Denied:
                Messenger.Default.Send(new GeolocationDeniedAccessMessage(true));
                break;

            case GeolocationAccessStatus.Unspecified:
                Messenger.Default.Send(new GeolocationDeniedAccessMessage(true));
                break;
        }
    }

    private void OnStatusChanged(Geolocator sender, StatusChangedEventArgs e)
    {
        switch (e.Status)
        {
            case PositionStatus.Ready:
                Messenger.Default.Send(new GeolocationAvailabilityMessage(true));
                Messenger.Default.Send(new GeolocationDeniedAccessMessage(false));
                break;

            case PositionStatus.Initializing:
                break;

            case PositionStatus.NoData:
                Messenger.Default.Send(new GeolocationAvailabilityMessage(false));
                break;

            case PositionStatus.Disabled:
                Messenger.Default.Send(new GeolocationDeniedAccessMessage(true));
                break;

            case PositionStatus.NotInitialized:
                break;

            case PositionStatus.NotAvailable:
                Messenger.Default.Send(new GeolocationAvailabilityMessage(false));
                break;
        }
    }

person Community    schedule 01.02.2016    source источник
comment
Что происходит после отключения геолокации в меню настроек?   -  person meneses.pt    schedule 11.02.2016
comment
Абсолютно ничего! Это действительно странно... Ни одно из моих событий не вызывается   -  person    schedule 11.02.2016
comment
Что ж, решение было настолько простым: создавать экземпляр геолокатора не в части GeolocationAccessStatus.Allowed, а в конструкторе, чтобы событие в любом случае отслеживалось.   -  person    schedule 11.02.2016


Ответы (2)


ОБНОВЛЕНИЕ

Проблема, кажется, заключается в регистрации для EventHandler. Если местоположение отключено после вызова StartTracking(), GeolocationAccessStatus будет «отказано», поэтому EventHandler никогда не будет зарегистрировано, а OnStatusChanged не будет вызываться после того, как пользователь включит отслеживание местоположения в настройках. Попробуйте перенести инициализацию Geolocator из корпуса GeolocationAccessStatus.Allowed


Убедитесь, что вы выбрали Location на вкладке возможностей вашего манифеста package.appxmanifest.

введите здесь описание изображения

person nor0x    schedule 02.02.2016
comment
Спасибо за ваш ответ, но я уже включил функцию определения местоположения - person ; 03.02.2016
comment
Это не ответ на вопрос. Если бы это было проблемой, у него были бы другие проблемы гораздо раньше. - person meneses.pt; 11.02.2016
comment
Не обязательно, поскольку исключение не возникает, если вы хотите запросить доступ к местоположению пользователя, а возможность определения местоположения не установлена. Основная ошибка в этом вопросе — регистрация обработчика события. Проверьте мой обновленный ответ - person nor0x; 11.02.2016
comment
Это была именно моя проблема! (Я имею в виду обновленный ответ). Конечно, мне пришлось создавать экземпляр геолокатора в самом начале, а не в части GeolocationAccessStatus.Allowed. - person ; 11.02.2016

Это также может быть вызвано тем, что службы определения местоположения не включены в Windows 10.

На рабочем столе перейдите в «Все настройки» -> «Конфиденциальность» -> «Местоположение» и убедитесь, что для параметра «Местоположение» установлено значение «Вкл.».

person Charlie    schedule 02.06.2016