Windows Phone Mango開發實踐——Shake Library應用執行個體
探索火星之Shake Mars
目錄
概述——開創新領域 1
微軟的"Dallas" 2
動手實踐初探Dallas——探索火星之Shake Mars 2
重力加速度感測 3
Shake Library實現晃動檢測的原理 3
Shake Library調用用法 4
Shake Library的配置參數 5
概述——開創新領域
《周易》曰:"雲雷,屯。君子以經輪。"意思是說烏雲驟起,雷聲交動,象徵著事業初創的艱苦時期。君子應鐵肩擔道義,負起經略天下的大義。移動互聯時代的競爭是生態系統的角鬥和資源整合能力的考驗,作為移動互連網競爭的制高點——智能終端作業系統三足鼎立的局面已然形成,此時正是山雨欲來風起雲湧之時,正是英雄開創事業之初。
微軟的"Dallas"
《Windows Phone Mango開發實踐》開篇Windows Phone的入門的應用程式——探索火星,是非常有趣的應用程式。探索火星應用程式正是與Windows Azure平台的Dallas提供的資料服務通訊,呈現美國國家航空航天局(National Aeronautics and Space Administration,NASA)提供的火星探測行動拍攝到的映像。
微軟的"Dallas"是由Windows Azure 和SQL Azure構建的資訊服務,能夠讓開發人員與資訊工作者在任何平台上使用優質的第三方資料集和內容。在我的《Windows Phone Mango開發實踐》出版之後,"Dallas"項目(現為Windows Azure Marketplace)於近期做了升級。
遺憾的是在新的Windows Azure Marketplace中找不到了NASA提供的火星探測行動的圖片,然而萬幸的是Windows Azure Marketplace原有的NASA Mars的服務還有,也就是說探索火星的應用還可以正常運行。如此,索火星的Account Key成了絕版的稀缺資源。如果您沒有運行探索火星的Account Key,只要您是《Windows Phone Mango開發實踐》的讀者或者喜歡探索火星應用的開發人員,我願意與您分享我的Windows Live ID和Account Key,前提條件是僅作為技術研究。您可以在部落格園留言或者新浪微博(http://weibo.com/highcedar)私信告知您的Email,我將Account Key發送至您的郵箱。
在新的探索火星應用中新增了重力感應檢測手機晃動的功能,當您輕輕搖晃手機時,應用會自動切換圖片,如果您連續的搖晃,出現的效果就是月球車在火星上採集樣本的動畫。
探索火星應用的英文名稱為SHAKE MARS,支援重力感應檢測手機晃動和手指觸控切換圖片,在Windows Phone Marketplace的深層連結為http://www.windowsphone.com/en-US/apps/12bee48c-dee1-4cfb-b04e-135eb4e69b68 。
探索火星和Shake Library來源程式和文檔:https://skydrive.live.com/redir.aspx?cid=6cf62487c100b43d&resid=6CF62487C100B43D!508 ,運行前請向我索取Windows Live ID和Account Key,因可能涉及Account Key的隱私性,所以只能採取這種不是很方便的方式。再次重申我願意與您分享我的Windows Live ID和Account Key,前提條件是僅作為技術研究。您可以在部落格園留言或者新浪微博(http://weibo.com/highcedar)私信告知您的Email,我將Account Key發送至您的郵箱。
動手實踐初探Dallas——探索火星之Shake Mars
建立應用程式以及與Windows Azure Marketplace通訊的部分在《Windows Phone Mango開發實踐》第二章已經詳細講述,本文將重點講述重力感應檢測晃動的實現方法。
重力加速度感測
處理重力加速度變化的ReadingChanged 事件的事件為 AccelerometerReadingEventArgs ,其 X、Y、Z屬性的內容值代表智能手機在 X 軸、Y 軸、和 Z 軸的加速方向,而不是三維空間的座標,其單位為重力單位,即G (1G = 9.81 m/s2)。除了 X、Y、與 Z 三個屬性以外,還有一個名稱為 Timestamp 的屬性,負責記錄重力加速度讀取資料的時間點。
請注意當智能型手機放在平坦的案頭上,而且正面朝上的時候,AccelerometerReadingEventArgs 類別的 Z 欄位的內容值會是 -1.0,表示 Z 軸承受 -1G 的重力,而當智能型手機放在平坦的案頭上,而且正面朝下的時候,AccelerometerReadingEventArgs 類別的 Z 欄位的內容值就會是 +1.0,表示 Z 軸承受 1G 的重力。下面是一個顯示相應數值的對應圖:
圖1 重力加速度數值對應圖
Shake Library實現晃動檢測的原理
Shake Library使用的加速度計檢測手機在三維空間的運動:
- Left-Right (X direction)左右(X方向)
- Top-Bottom (Y direction)頂底(Y方向)
- Forward-Backward (Z direction)前後(Z方向)
當您行動電話,在三維空間中,應用程式得到了很多的讀數(感應器是相當嘈雜),實際得到的資料在一個特定的時間內是在手機上的相對重力的變化。
考慮到這一點,高效能的Shake Library,按照以下動搖手勢檢測過程處理資料:
- 降噪
- 劃分為成"搖晃shake"和"保持still"的訊號段
- Shake方向分類
應用程式的感應器讀數,得到三位座標軸(X,Y和Z值)。為了確保我們所檢測到的運動確實是手機搖晃的狀態,而不是只是一個隨機在一個方向的運動,我們需要計數多個間隔的運動,更重要的是,在向量方向的變化。
例如,如果我們發現我們的晃動訊號的主要方向是X,那麼我們將檢查的訊號中的所有X軸的向量值。
中,我們看到了一個真正的搖晃的狀態,可以清楚地看出Z軸為晃動的主方向,重力加速度值在Z軸的正負方向來回變換。
圖2 Z軸方向的晃動
如果您也對shake library感興趣,可在App Hub上擷取shake library代碼、樣本和文檔等更多的資訊 Windows Phone Shake Gesture Library Recipe page on AppHub 。
Shake Library調用用法
第一步:添加引用動搖手勢庫ShakeGestures.dll
第二步:添加一個using語句檔案頭
using ShakeGestures;
event第三步:註冊ShakeGesture事件、設定參數和啟動手機晃動檢測
// register shake event
ShakeGesturesHelper.Instance.ShakeGesture += new EventHandler<ShakeGestureEventArgs>(Instance_ShakeGesture);
// optional, set parameters
ShakeGesturesHelper.Instance.MinimumRequiredMovesForShake = 2;
// start shake detection
ShakeGesturesHelper.Instance.Active = true;
第四步:ShakeGesture事件處理常式、
在探索火星的應用中當檢測到手機晃動時,與Windows Azure Marketplace通訊擷取下一張探索火星的圖片。
private void Instance_ShakeGesture(object sender, ShakeGestureEventArgs e)
{
//_lastUpdateTime.Dispatcher.BeginInvoke(
// () =>
// {
// _lastUpdateTime.Text = DateTime.Now.ToString();
// CurrentShakeType = e.ShakeType;
// });
Deployment.Current.Dispatcher.BeginInvoke(delegate { GetNextImage(); });
}
ShakeGestureEventArgs持有ShakeType動搖的姿態方向的屬性,用於標識。
Shake Library的配置參數
These parameters control various aspects of the gesture detection algorithm.By changing these parameters, you can change your application's sensitivity to shakes and to the duration of a shake.通過改變這些參數,你可以改變你的應用程式的靈敏度和晃動持續的時間。The following section describes the available parameters.以下部分描述了可用的參數。
ShakeMagnitudeWithoutGravitationThreshold
Description: Any vector that has a magnitude (after reducing gravitation force) bigger than this parameter value is considered as a shake vector.
Default value: 0.2
StillCounterThreshold
Description: This parameter determines how many consecutive still vectors are required to stop a shake signal.
Default value: 20 (about 400 msec)
StillMagnitudeWithoutGravitationThreshold
Description: This parameter determines the maximum allowed magnitude (after reducing gravitation) for a still vector to be considered.
Default value: 0.02
MaximumStillVectorsNeededForAverage
Description: The maximum number of still vectors needed to create a still vector average. Instead of averaging the entire still signal, we just look at the top recent still vectors. This is performed as runtime optimization.
Default value: 20
MinimumStillVectorsNeededForAverage
Description: The minimum number of still vectors needed to create a still vector average. Without enough vectors, the average won't be stable and thus will be ignored.
Default value: 5
MinimumShakeVectorsNeededForShake
Description: Determines the number of shake vectors needed in order to recognize a shake.
Default value: 10
WeakMagnitudeWithoutGravitationThreshold
Description: Shake vectors with a magnitude lower than this parameter won't be considered for gesture classification.
Default value: 0.2
MinimumRequiredMovesForShake
Description: Determines the number of moves required to get a shake signal.
Default value: 3
Windows Phone Mango開發實踐
Windows Phone Mango Development Practice
作者: 雪松