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.
中未启用位置服务,也可能导致此问题
从桌面转到“所有设置”->“隐私”->“位置”,确保“位置”设置为“开”。
我正在使用 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.
中未启用位置服务,也可能导致此问题从桌面转到“所有设置”->“隐私”->“位置”,确保“位置”设置为“开”。