我正在使用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;
}
}
答案 0 :(得分:2)
<强>更新强>
问题似乎是EventHandler
的注册。如果在调用StartTracking()
后禁用了位置,则GeolocationAccessStatus
将被拒绝&#34;因此EventHandler
永远不会被注册,一旦用户在设置中启用位置跟踪,就不会调用OnStatusChanged
。
尝试将Geolocator
案例1>的初始化移出GeolocationAccessStatus.Allowed
确保您在联系人Location
的功能标签中选择了package.appxmanifest
。
答案 1 :(得分:0)
如果在Windows 10中未启用位置服务,也可能导致此问题。
在桌面上,转到所有设置 - &gt;隐私 - &gt;位置并确保位置设置为ON。