PS : 因為需要冷啟動至少也需要一分鐘以上,所以最好在公用類初始化,在需要調用的時候直接使用。
GeoCoordinateWatcher 類提供基於座標的位置資料,其來自當前的位置提供者。 來自當前位置提供者的基於座標的位置資料,該提供者是電腦上優先順序別最高的位置提供者,其優先順序別取決於一系列因素,如:來自所有提供者的資料的存在時間和準確性、位置應用程式請求的準確性、與位置提供者關聯的電量消耗和效能影響。 當前位置提供者可能會隨時間改變,例如,當 GPS 裝置失去內部附屬訊號功能並且 Wi-Fi 三邊轉換法提供者成為電腦上最準確的提供者時。
若要開始訪問位置資料,請建立 GeoCoordinateWatcher,然後調用 Start 或 TryStart,開始從當前的位置提供者擷取資料。
可檢查 Status 屬性來確定資料是否可用。 如果資料可用,您可以從 Position 屬性一次擷取位置,或通過處理 PositionChanged 事件接收連續的位置更新。
Permission、Status 以及 Position 屬性支援 INotifyPropertyChanged,因此應用程式可以資料繫結到這些屬性。
在 Windows 7 中,如果位置提供者已經安裝並能夠解析電腦的位置,則所有 System.Device.Location 類都完全正常。
注意 |
在 Windows 7 Starter 版上,唯一受支援的位置供應商是控制台中的預設位置提供者,且必須安裝增益集以指定緯度和經度。 |
注意:在 Windows 7 之前的 Windows 版本中,以下條件適用:
using System;using System.Device.Location; namespace GetLocationEvent{ class Program { static void Main(string[] args) { CLocation myLocation = new CLocation(); myLocation.GetLocationEvent(); Console.WriteLine("Enter any key to quit."); Console.ReadLine(); } class CLocation { GeoCoordinateWatcher watcher; public void GetLocationEvent() { this.watcher = new GeoCoordinateWatcher(); this.watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged); bool started = this.watcher.TryStart(false, TimeSpan.FromMilliseconds(2000)); if (!started) { Console.WriteLine("GeoCoordinateWatcher timed out on start."); } } void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) { PrintPosition(e.Position.Location.Latitude, e.Position.Location.Longitude); } void PrintPosition(double Latitude, double Longitude) { Console.WriteLine("Latitude: {0}, Longitude {1}", Latitude, Longitude); } } }}