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
相關文章
- 7月31日,HarmonyOS開發者日將於杭州舉辦
- Windows Phone應用效能監控與分析技巧Windows
- 5.9安卓開發日記31安卓
- 7月18日—7月24日共有31款遊戲開測|GameRes遊戲GAM
- Windows Phone 8初學者開發—第13部分:設定LongListSelector中磁貼的樣式Windows
- [開發教程]第7講:Bootstrap響應式佈局boot
- [開發教程]第31講:Bootstrap對話方塊boot
- 開發日誌7
- 7月31日,羅布樂思開發者大會,“正版元宇宙”來了!元宇宙
- 使用 Flutter 加速應用開發Flutter
- 圖譜謎宮(2019年7月31日)
- ◆Π謎宮2019◆(7月31日附加謎題)
- Windows Phone SDK 8/8.1 官方下載Windows
- windows10系統設定和使用Your Phone應用的方法Windows
- 《Unity 3D 遊戲開發(第2版)》讀後感Unity3D遊戲開發
- 爽戰玄幻修真成神 《吞星》手遊7月31日全平臺首發
- 每週分享第 31 期
- 蘋果計劃明年在印度開設iOS應用設計和開發加速器蘋果iOS
- Xamarin Essentials教程使用加速度感測器Accelerometer
- HarmonyOS NEXT應用開發案例—自定義日曆選擇器
- 因開發ChatGPT應用被約談ChatGPT
- 淺談桌面應用程式的開發
- 本週三晚19:00Hello HarmonyOS應用篇第7課—分散式應用開發分散式
- Windows 應用開發的系統要求Windows
- Q學習第31天-QThreadQTthread
- D2 日報 第144期 2019年7月10日D2 日報
- 2024/7/31 每日一題每日一題
- 微軟官方Windows Phone、Windows 10 Mobile裝置恢復工具被曝遭到移除微軟Windows
- 開發者談切入遊戲開發市場的7個選擇視角遊戲開發
- 深入理解Windows Phone 8.1 UI控制元件程式設計WindowsUI控制元件程式設計
- Win10系統如何禁用Windows Phone-PC連結Win10Windows
- 2024年3月5日第7篇部落格
- 10月31日作業
- 第53個地球日,開發者可以做什麼
- 開發者日刊 第164期 2019年8月12日
- Python 潮流週刊第 31 期(摘要)Python
- 關於開發者協議Edit Phone Number終極解決方案協議
- 機器學習第7次作業機器學習
- Adjust最新報告:2021年第1季度移動應用增長31%