GeolocationAccessStatus更改事件不会引发

时间:2016-02-01 20:57:26

标签: c# windows-runtime uwp windows-10-universal

我正在使用Windows 10 SDK(版本10586)开发一个Windows移动应用程序,我需要订阅Geolocator的StatusChanged事件。

问题是,当我使用设置>关闭地理定位时位置菜单,我的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;
        }
    }

2 个答案:

答案 0 :(得分:2)

<强>更新

问题似乎是EventHandler的注册。如果在调用StartTracking()后禁用了位置,则GeolocationAccessStatus将被拒绝&#34;因此EventHandler永远不会被注册,一旦用户在设置中启用位置跟踪,就不会调用OnStatusChanged。 尝试将Geolocator案例的初始化移出GeolocationAccessStatus.Allowed

确保您在联系人Location的功能标签中选择了package.appxmanifest

enter image description here

答案 1 :(得分:0)

如果在Windows 10中未启用位置服务,也可能导致此问题。

在桌面上,转到所有设置 - &gt;隐私 - &gt;位置并确保位置设置为ON。