GeolocationAccessStatus 更改事件不会引发

GeolocationAccessStatus change event doesn't raise

我正在使用 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;
        }
    }

更新

问题似乎出在 EventHandler 的注册上。如果调用 StartTracking() 后位置被禁用,则 GeolocationAccessStatus 将是 "denied",因此 EventHandler 永远不会被注册,并且一旦用户转向 OnStatusChanged 将不会被调用关于设置中的位置跟踪。 尝试将 Geolocator 的初始化移出 GeolocationAccessStatus.Allowed 案例


确保您已在清单 package.appxmanifest 的功能选项卡中选择 Location

如果在 Windows 10.

中未启用位置服务,也可能导致此问题

从桌面转到“所有设置”->“隐私”->“位置”,确保“位置”设置为“开”。