Windows Phone 7 開發 31 日談——第13日:位置服務
By Jeff Blankenburg
本文是“Windows Phone 7 開發 31 日談” 系列的第13日。
昨天,我們討論了Windows Phone的震動控制器,以及如何告知我們的使用者去注意他們的裝置上所發生的事兒。今天,我們談談位置服務,以及如何獲取他們的裝置位置的資訊。
為什麼位置很重要?
裝置在不斷髮展,行動電話有了能為你提供比幾乎任何其他裝置都高的定製資訊的能力。特別是當我們說到電話的位置時。下面是一些具體的例子(我為本文整理的):
檢索文件的程式
假設我們有一個應用程式(或者通過網路訪問)包含了數以萬計的為客戶提供服務用的產品和裝置的電路圖,零件表和文件。在每一個裝置上,都不得不去搜尋當天是哪個使用者在使用,找到當前所處的具體辦公室或地點然後再從繁雜的文件中去解析符合要求的。
通過在程式中新增位置資訊,我們就完全不用去搜尋使用者了。如果每個文件都被標記了地理位置資料,當我們接近建築物時,在那個地點的文件立即被調出。如果我們能夠獲取到一個大設施足夠的位置資訊,甚至可以判斷出你最近的裝置是哪個。通過裝置的資訊來決定具體要顯示的資料是通過位置資料增強程式功能的一種方式。
高爾夫程式
我見過很多高爾夫程式允許你輸入分數,記錄差點,甚至是和你的朋友分享這些資料。然而有一個想法突然從我腦海中浮現出來。
這個應用程式在開始時,識別你當前在哪個高爾夫球場。它也會列出附近的球場(你在途中的時候),不必去查詢這個球場這是一個了不起的特性。另外,它可以識別你在哪個洞,以及距離這個球場主要地標的距離(沙坑,水,樹,球穴區等等)。我見過的最酷的特性是杆杆分析。每次我打一杆,我告訴它是哪個。當我去球所在的地兒時,會記錄我打的這一杆走了多遠的距離,如果有足夠的資料,甚至可以基於我到球穴區之間的距離向我推薦如何打下一杆。這是位置資料的一個超讚的應用。
理解位置服務
我們有3種方法來獲取裝置的位置。GPS,手機跟蹤定位和WiFi位置。下面來快速地瀏覽一下每種的優勢和弱點:
在你開始擔心得去比較和對照來自3種源的資料前,先看看圖片中的綠色雲圖。微軟為我們提供了一組位置服務。
在Windows Phone 7中使用位置服務
寫到這兒,還沒有任何程式碼。好訊息來了:這可能是你在程式碼中做的最簡單的事之一。按照下面的步驟:
- 建立一個GeoCoordinateWatcher物件。
- 建立一個事件處理程式處理使用者位置的改變。
- 在事件觸發時抓取資料。
你可能想為使用者提供更多功能(我的例子中正好做了這些事兒),但最簡單的例子是下面的程式碼:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- using System.Windows.Shapes;
- using Microsoft.Phone.Controls;
- using System.Device.Location;
- using Microsoft.Phone.Tasks;
- namespace Day13_LocationServices
- {
- public partial class MainPage : PhoneApplicationPage
- {
- GeoCoordinateWatcher gcw;
- // Constructor
- public MainPage()
- {
- InitializeComponent();
- gcw.PositionChanged += new EventHandler>(gcw_PositionChanged);
- gcw.Start();
- }
- void gcw_PositionChanged(object sender, GeoPositionChangedEventArgs e)
- {
- Latitude.Text = e.Position.Location.Latitude.ToString();
- Longitude.Text = e.Position.Location.Longitude.ToString();
- }
- }
- }
像第11日的加速感應器一樣,模擬器不能真正地獲取位置資料。(你可以檢查GoeCoordinateWatcher.Status來獲取資訊)。然而,使用我們的好朋友Reactive Extensions,就可以模擬這些資料了。
MSDN上有一篇非常棒的關於如何實現的文章,所以我就不在這裡重複了。你可以在這來檢視MSDN中關於Windows Phone上Reactive Extensions和 位置的使用。
下載程式碼示例
在示例程式中,我儘可能多地利用了位置服務。我讓使用者在高和預設的精確度中來選擇,開始並停止服務,甚至在應用程式中建立當前座標的地圖。來試試看。比上面任何例子都豐富。
原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-13-Location-Services.aspx
相關文章
- Windows Phone 7 開發 31 日談——第7日:啟動器Windows
- Windows Phone 7 開發 31 日談——第25日:外部APIWindowsAPI
- Windows Phone 7 開發 31 日談——第24日:嵌入字型Windows
- Windows Phone 7 開發 31 日談——第19日:推送通知Windows
- Windows Phone 7 開發 31 日談——第3日:返回鍵Windows
- Windows Phone 7 開發 31 日談——第21日:Silverlight Toolkit for Windows PhoneWindows
- Windows Phone 7 開發 31 日談——第16日:全景檢視Windows
- Windows Phone 7 開發 31 日談——第8日:選擇器Windows
- Windows Phone 7 開發 31 日談——第4日:裝置方向Windows
- Windows Phone 7 開發 31 日談——第1日:專案模板Windows
- Windows Phone 7 開發 31 日談——第18日:WebBrowser控制元件WindowsWeb控制元件
- Windows Phone 7 開發 31 日談——第15日:獨立儲存Windows
- Windows Phone 7 開發 31 日談——第11日:加速感應器Windows
- Windows Phone 7 開發 31 日談——第5日:系統主題Windows
- Windows Phone 7 開發 31 日談——第2日:頁面導航Windows
- Windows Phone 7 開發 31 日談——第22日:應用?還是 遊戲?Windows遊戲
- Windows Phone 7 開發 31 日談——第20日:地圖控制元件Windows地圖控制元件
- Windows Phone 7 開發 31 日談——第17日:樞軸控制元件Windows控制元件
- Windows Phone 7 開發 31 日談——第14日:墓碑機制(多工)Windows
- Windows Phone 7 開發 31 日談——第12日:使手機震動Windows
- Windows Phone 7 開發 31 日談——第23日:提供試用版應用程式Windows
- Windows Phone 7 開發 31 日談——第26日:與其他開發人員(免費)分享你的程式Windows
- HarmonyOS 位置服務開發指南
- 一起學Windows Phone7開發(十四.一 Phone Task)Windows
- Windows Phone7開發系列視訊地址Windows
- ·Windows Phone 7首款機型8月25日開賣Windows
- 使用XNA為Windows phone 7開發簡單拼圖遊戲Windows遊戲
- Windows Phone 8開發連結Windows
- windows phone資料庫開發Windows資料庫
- Windows Phone 8 開發筆記Windows筆記
- 開發WP7專案的好工具: Windows Phone CommandsWindows
- 《Windows Phone 7入門經典之使用Silverlight和XNA開發Windows Phone應用》書評Windows
- Windows Phone 7 墓碑機制Windows
- Windows Phone 7程式設計Windows程式設計
- 淺談Windows Phone 7本地資料庫的選擇Windows資料庫
- HTML Agility Pack for Windows Phone 7 (WP7)HTMLWindows
- Windows Phone 7解析圖片格式Windows
- Windows Phone 8開發知識筆記Windows筆記