2013-02-11 27 views
0

在wp8中,据我所见,有两种从Geolocator获取位置的方法。2种获取wp8位置的方法,哪个最好?

  1. 听PositionChanged事件
  2. 使用GetPositionAsync

在我的应用我希望得到的位置说,每5秒。这与我使用的上述哪一项有关?或者是一种比其他方法更适合频繁定位捕获的方法?

+1

1.当位置有*改变*时被触发,2.让你*当前*位置异步。 – 2013-05-02 11:05:04

回答

1

如果您想每隔5分钟左右获取一次位置,我会使用GetPositionAsync,因为这样可以在需要时检索数据。使用事件可能意味着您最终会在用户移动时检索数据,这可能会导致您遇到问题。

+0

每5秒钟还是5分钟? – Gaz83 2013-02-11 16:13:35

+0

@ Gaz83 - 抱歉,我的意思是秒,出于某种奇怪的原因,我输入了分钟。使用该事件的主要问题是,每次用户移动并且位置更新时,事件都会触发。你想使用哪种类型取决于程序的确切目的,但根据你所说的话,当你需要最佳工作时,调用GetPositionAsync时听起来像我。 – Kobunite 2013-02-11 16:22:12

5

这不是GeoLocation在WP7/WP8上的工作方式。

Windows Phone从多个来源(GPS,GLONASS,WiFi,蜂窝塔,归巢鸽等)获取位置信息并将其缓存供将来使用。 WP7/WP8位置服务API的工作方式是他们总是获取新信息,并且取决于您的DesiredAccuracy,并且您的MinimumThreshold将决定将事件升级到托管/ WinPRT API。再次,事件是基于时间的。定位服务API中发起的事件基于对您的特定标准有用的新数据的可用性。

如果您希望每5秒钟基于GeoLoc执行一个动作,最好的办法是订阅GeoLocator/GeoCoordinateWatcher中的事件,缓存应用中的最新值,并且每5秒钟使用最新值。不要指望每5秒触发一次地理定位事件,也不要使用GetPositionAsync()轮询WinPRT API。 GetPositionAsync()用于一次性地理位置采集场景,而不是跟踪场景。

+0

但是,如果你的运动阈值为1米,可用于正在运行的应用程序。如果UI线程不得不更新显示器上的统计数据,例如速度和距离,那么触发移动的事件是否会影响性能并导致更新延迟? – Gaz83 2013-02-12 11:29:48