Windows Phone 7 開發 31 日談——第11日:加速感應器
By Jeff Blankenburg
本文是“Windows Phone 7 開發 31 日談” 系列的第11日。
昨天,我們討論了Windows Phone的軟鍵盤。今天,來談談基於硬體的加速感應器以及如何利用它提供的資訊。
什麼是加速感應器?
目前缺乏一個更好的定義,Windows Phone裝置中的加速度感應器是用來度量3個座標軸加速度的裝置,這裡說的加速度是相對於自由落體加速度的。除了一個時間戳之外,值都是用重力值(G)表示的(1G = 9.81 m/s2 )。這意味著如果將電話正面朝上平放在一個絕對的平面上,Z軸應該為-1.0,其他兩個軸的資料為0。下面的圖例演示了不同的值(感謝的來自於WindowsTeamBlog 的圖片):
如何在WP7的加速感應器中獲取資料?
幸好,這非常簡單。複雜的是我們需要管理一些執行緒,但其實也很簡單。下面是我們所要做的:
- 初始化一個Accelerometer物件。
- 建立一個ReadingChanged()事件處理程式來監視資料的變化。
- 將事件中的結果傳回我們的頁面執行緒(這個事件是在另一個執行緒中觸發的)。
- 在程式中使用這些資料。
這是我這個例子中MainPage.xaml.cs的全部內容。你會看到我在MainPage.xaml檔案中建立了3個TextBlock(XText, YText和ZText) ,所以我可以在螢幕中顯示這些值。同樣還可以看到我新增了一個Microsoft.Devices.Sensors名稱空間的引用來訪問Accelerometer類。
- 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 Microsoft.Devices.Sensors;
- namespace Day11_Accelerometer
- {
- public partial class MainPage : PhoneApplicationPage
- {
- Accelerometer acc = new Accelerometer();
- // Constructor
- public MainPage()
- {
- InitializeComponent();
- acc.ReadingChanged += new EventHandler(acc_ReadingChanged);
- acc.Start();
- }
- void acc_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
- {
- Deployment.Current.Dispatcher.BeginInvoke(() => ThreadSafeAccelerometerChanged(e));
- }
- void ThreadSafeAccelerometerChanged(AccelerometerReadingEventArgs e)
- {
- XText.Text = e.X.ToString("0.000");
- YText.Text = e.Y.ToString("0.000");
- ZText.Text = e.Z.ToString("0.000");
- }
- }
- }
嗯,模擬器不能模擬加速感應器的資料
是的。如果你下載了本文最後的程式碼,肯定會納悶為什麼Z軸資料總是-1呢,這是因為模擬器認為它是在平面上的。它沒有(有效的)方法來模擬 加速感應器的資料。但是有一些聰明人找到了讓這成為現實的方法。本篇文章剩下的部分讓我很為難。我很想給每個模擬器解決方案寫一個例子,但是還有這麼多好的方法來模擬加速感應器資料,我認為讓你們知道這些比僅僅寫程式碼示例要好。這有很多建議供你去實驗(每個站點都提供了程式碼示例):
Reactive Extensions是一個框架允許你為加速感應器(還有位置服務,我會在第13日中介紹)模擬資料而無需真實裝置。實際上你無法控制這個動作,它只能給你產生隨機資料。安裝起來非常簡單,而且相比於因為沒有真實的手機而不能開發來說十分地高效。MSDN的這個站點中有一個非常好的演練:http://bit.ly/bdeaft 。
這個可能是最酷的選擇了。它利用攝像頭和擴增實境,允許你移動手機的列印圖就像在真實世界中移動它一樣。它是如此的酷以至於使我神魂顛倒,有兩點原因:
- 它允許你真正地模擬動作。
- 它利用了擴增實境,人。這是一個了不起的技術應用。
來看看這些程式碼示例,來這裡下載附加的庫:http://bit.ly/9TfqaSn
這個庫不僅僅能用於Windows Phone模擬器,不過它確實可以為我們的目的非常好的工作。故事是這樣的:如果你有一個任天堂的Wii,你可以用控制器(一個Wii遙控器)來生成你的加速感應器資料。Brian Peek是將這些內容整合在這個小託管程式碼庫中的開發人員,如果你想實現的話可以到他的站點獲取相關資訊!http://bit.ly/aUdEEW
Windows Mobile Unified Sensor API
是的,就是“Windows Mobile”。這是在某些型別的Windows Mobile 6.x 裝置上與加速感應器互動的方式。這篇文章描述了一種利用這種技術在Windows Phone上開發的方法。他們好像沒有提供程式碼示例,但看起來非常簡單:http://bit.ly/crHbW9
下載程式碼示例
記住上述所有的解決方案都是暫時的。直到拿到裝置之前這些都是在“偽造”加速感應器的資料。沒有什麼能替代在真實裝置上執行你的程式碼。如果你沒有機會這麼做,請聯絡我 。我來看看能為你在手機面前做什麼,即使只是幾小時。
原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-11-Accelerometer.aspx
相關文章
- Windows Phone 7 開發 31 日談——第7日:啟動器Windows
- Windows Phone 7 開發 31 日談——第8日:選擇器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 日談——第22日:應用?還是 遊戲?Windows遊戲
- Windows Phone 7 開發 31 日談——第16日:全景檢視Windows
- Windows Phone 7 開發 31 日談——第13日:位置服務Windows
- Windows Phone 7 開發 31 日談——第4日:裝置方向Windows
- Windows Phone 7 開發 31 日談——第1日:專案模板Windows
- Windows Phone 7 開發 31 日談——第21日:Silverlight Toolkit for Windows PhoneWindows
- Windows Phone 7 開發 31 日談——第18日:WebBrowser控制元件WindowsWeb控制元件
- Windows Phone 7 開發 31 日談——第15日:獨立儲存Windows
- Windows Phone 7 開發 31 日談——第5日:系統主題Windows
- Windows Phone 7 開發 31 日談——第2日:頁面導航Windows
- Windows Phone 7 開發 31 日談——第23日:提供試用版應用程式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 日談——第26日:與其他開發人員(免費)分享你的程式Windows
- ·Windows Phone 7首款機型8月25日開賣Windows
- 一起學Windows Phone7開發(十四.一 Phone Task)Windows
- Windows Phone7開發系列視訊地址Windows
- 7月18日—7月24日共有31款遊戲開測|GameRes遊戲GAM
- 《Windows Phone 7入門經典之使用Silverlight和XNA開發Windows Phone應用》書評Windows
- Windows phone應用開發[15]-輔助工具Windows
- 7月31日,HarmonyOS開發者日將於杭州舉辦
- Windows phone應用開發[18]-下拉重新整理Windows
- Windows phone應用開發[19]-RSA資料加密Windows加密
- Windows phone 應用開發[2]-資料快取Windows快取
- Windows phone 應用開發[9]-單元測試Windows
- 11月1日—11月7日共有13款遊戲開測|GameRes遊戲GAM
- Repractise基礎篇:Web應用開發七日談Web
- 使用XNA為Windows phone 7開發簡單拼圖遊戲Windows遊戲
- 10月31日—11月6日共有20款遊戲開測|GameRes遊戲GAM
- Windows Phone 8開發連結Windows