2016-07-27 55 views
0

例如在这个page MSDN说:注册的地理栅栏不会触发输入的事件两次。为什么?

地理围栏被保存在磁盘上,所以他们只需要添加到系统中一次。

但我想不出如何“使用”该功能。只有当我清除地理栅栏监视器(GeofenceMonitor.Current.Geofences.Clear();),然后重新创建它们或重新启动设备时,我的应用程序才会为注册的地理栅栏输入事件。

要明白我的问题,我有这样的情景官方MS UWP地理位置样本:在菜单

  1. open UWP geolocation sample
  2. 第4项是:前景区域范围设定
  3. 创建新的地理围栏之后,使用此设置按钮
  4. 注册地理栅栏中出现新的地理栅栏
  5. 因为我在几秒钟后在此处设置了按钮,我在事件框中输入了事件框
  6. 一切都OK
  7. 当我关闭应用程序,并再次运行它,我发现,从以前的(如预期),但在这里注册的地理围栏框创建地理围栏是我的问题 - 它永远不会再次闪光进入事件

你能解释一下我的原因吗?这些是我需要调用的一些“重新注册方法”吗?或者我从坏的角度看待这个问题?或者我的方法是在每个应用程序启动时调用GeofenceMonitor.Current.Geofences.Clear();

感谢

回答

0

在你的脚步,我没有看到你触发已退出状态。如果您始终停留在您设置的地理围栏中,则在您运行时不会触发GeofenceStateChanged,并且同样,后台任务中的​​也不会触发。所以你不会得到进入状态两次。如果您先离开地理围栏,然后再次运行应用,则会在“事件”框中收到“已输入”事件。

此外,以确保地理围栏可以多次使用,我们需要设置Geofence.SingleUse propertyfalseGeofence.Duration property到足够大的时间间隔或0

的时间间隔对于如何在UWP使用地理围栏应用程序,请参阅Guidelines for geofencing appsSet up a geofence。如果您使用的是Mobile Emulator,则可以参考此博客:Using the Windows Phone Emulator for testing apps with geofencing

+0

谢谢。那么是否有可能在进入输入状态后(例如10分钟后)强制触发退出状态?或者,我是否必须采取一些解决方法,并在删除和添加刚才输入的地理围栏时使用? –

+0

@HonzaBejvl AFAIK,我们不能强迫触发退出状态。我不确定你为什么需要这样做。通常,用户不会始终处于地理围栏中,退出状态应该能够迟早被触发。但是,通过使用Geofence.Duration属性,我们可以在一段时间后移除地理围栏。或者我们可以使用计时器(例如[ThreadPoolTimer](https://msdn.microsoft.com/en-us/library/windows/apps/windows.system.threading。threadpooltimer))在进入Entered状态时做我们想做的事情。 –

+0

谢谢你的帮助。我终于解决了这个。我知道通常用户会离开篱笆,但这不是这种情况。我的应用程序告诉用户附近有巴士站时。我必须使用相对较大的围栏半径,因此用户很可能会在应用程序启动的相同围栏关闭应用程序。解决方案:当地理栅栏进入输入状态时,我保存地理栅栏的ID,当栅栏进入退出状态时,我删除该保存的ID。 - >在启动过程中,我删除并添加所有已保存的栅栏(通常为0-3),因为我只有250个栅栏,所以解决方案并不昂贵。 –

相关问题