输入地理围栏不会打开 One Geofence StateChanged
enter on geofence doens't open the OnGeofenceStateChanged
我正在关注 guide here。
当一切都完成后(我创建了 Geofence
并将其放在地图上),如果我进入 Geofence
区域导航到它或在我的位置创建它没有任何反应。
没有调用OnGeofenceStateChanged
事件,所以我不知道如何管理进入Geofence
区域事件。
我做错了什么?
代码
private void DrawLOCNAME(double lat, double lon, string LOCNAME)
{
// Set the fence ID.
string fenceId = "LOCNAME";
// Define the fence location and radius.
BasicGeoposition position;
position.Latitude = lat;
position.Longitude = lon;
position.Altitude = 0.0;
// Set a circular region for the geofence.
Geocircle geocircle = new Geocircle(position, 2000);
// Set the monitored states.
MonitoredGeofenceStates monitoredStates =
MonitoredGeofenceStates.Entered |
MonitoredGeofenceStates.Exited |
MonitoredGeofenceStates.Removed;
// Set how long you need to be in geofence for the enter event to fire.
TimeSpan dwellTime = TimeSpan.FromSeconds(1);
//non so se è giusto ssettarlo a zero così
TimeSpan duration = TimeSpan.FromDays(1);
// Set up the start time of the geofence.
DateTimeOffset startTime = DateTime.Now;
// Create the geofence.
Geofence geofence = new Geofence(fenceId, geocircle, monitoredStates, false, dwellTime, startTime, duration);
// Register for state change events.
GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChanged;
//GeofenceMonitor.Current.StatusChanged += OnGeofenceStatusChanged;
// Center the map over the POI.
Mappe.Center = snPoint;
//Mappe.ZoomLevel = 14;
}
public async void OnGeofenceStateChanged(GeofenceMonitor sender, object args)
{
var reports = sender.ReadReports();
//BLABLABLA IS NOT IMPORTANT
------->I'M NOT ABLE TO ENTER HERE<-------
}
您必须确保将您创建的 Geofence
添加到 GeofenceMonitor.Current.Geofences
集合中,以便监视器知道它。从文档中看不是很清楚,但这是必须的地方。同样根据示例(示例将对集合的引用存储在 geofences
字段中并使用它而不是直接使用 GeofenceMonitor.Current.Geofences
),建议将添加到列表中的内容包装在异常处理程序中,如果监视器无法添加它:
try
{
GeofenceMonitor.Current.Geofences.Add( geofence );
}
catch
{
//adding failed
}
我现在已发送拉取请求来更新文档以说明 Geofence
注册。
我正在关注 guide here。
当一切都完成后(我创建了 Geofence
并将其放在地图上),如果我进入 Geofence
区域导航到它或在我的位置创建它没有任何反应。
没有调用OnGeofenceStateChanged
事件,所以我不知道如何管理进入Geofence
区域事件。
我做错了什么?
代码
private void DrawLOCNAME(double lat, double lon, string LOCNAME)
{
// Set the fence ID.
string fenceId = "LOCNAME";
// Define the fence location and radius.
BasicGeoposition position;
position.Latitude = lat;
position.Longitude = lon;
position.Altitude = 0.0;
// Set a circular region for the geofence.
Geocircle geocircle = new Geocircle(position, 2000);
// Set the monitored states.
MonitoredGeofenceStates monitoredStates =
MonitoredGeofenceStates.Entered |
MonitoredGeofenceStates.Exited |
MonitoredGeofenceStates.Removed;
// Set how long you need to be in geofence for the enter event to fire.
TimeSpan dwellTime = TimeSpan.FromSeconds(1);
//non so se è giusto ssettarlo a zero così
TimeSpan duration = TimeSpan.FromDays(1);
// Set up the start time of the geofence.
DateTimeOffset startTime = DateTime.Now;
// Create the geofence.
Geofence geofence = new Geofence(fenceId, geocircle, monitoredStates, false, dwellTime, startTime, duration);
// Register for state change events.
GeofenceMonitor.Current.GeofenceStateChanged += OnGeofenceStateChanged;
//GeofenceMonitor.Current.StatusChanged += OnGeofenceStatusChanged;
// Center the map over the POI.
Mappe.Center = snPoint;
//Mappe.ZoomLevel = 14;
}
public async void OnGeofenceStateChanged(GeofenceMonitor sender, object args)
{
var reports = sender.ReadReports();
//BLABLABLA IS NOT IMPORTANT
------->I'M NOT ABLE TO ENTER HERE<-------
}
您必须确保将您创建的 Geofence
添加到 GeofenceMonitor.Current.Geofences
集合中,以便监视器知道它。从文档中看不是很清楚,但这是必须的地方。同样根据示例(示例将对集合的引用存储在 geofences
字段中并使用它而不是直接使用 GeofenceMonitor.Current.Geofences
),建议将添加到列表中的内容包装在异常处理程序中,如果监视器无法添加它:
try
{
GeofenceMonitor.Current.Geofences.Add( geofence );
}
catch
{
//adding failed
}
我现在已发送拉取请求来更新文档以说明 Geofence
注册。