在目前新的手機上都配有方向感應器(或是稱加速度計?),很常見的用途是當你的手機改變方向的時候,畫面也可以隨著方向的變更進行自動的切換,這真是一個很優的功能;或是一些類似賽車等的小遊戲,甚至不需要方向鍵來操控方向,直接用偵測器來偵測手機擺動的方向,玩起來更有感覺;那麼在WP7中應該要怎麼去抓目前手機的方向出來呢?
下面簡單的做個測試,首先要先引入命名空間
之後利用Accelerometer類別就可以偵測了,主要必須要處理ReadingChanged的事件,例如下面的方式
{
Sensor = new Accelerometer();
Sensor.ReadingChanged += new EventHandler(Sensor_ReadingChanged);
Sensor.Start();
tbState.Text = "Accelermoter detect started";
}
catch (AccelerometerFailedException)
{
tbState.Text = "Start Acceleromter error";
}
事件處理的程式碼部分大致會像是下面這樣子
{
this.Dispatcher.BeginInvoke(() => ReadingChanged(e));
}
void ReadingChanged(AccelerometerReadingEventArgs e)
{
tbData.Text = "X: " + e.X.ToString() + Environment.NewLine +
"Y: " + e.Y.ToString() + Environment.NewLine +
"Z: " + e.Z.ToString() + Environment.NewLine;
}
上面這邊我將目前x,y,z軸的數值簡單的直接顯示在TextBloxk上面,而顯示的時候因為是該事件是引發在不同的執行緒上,所以必須要用委派的方式來更新UI,這部分要留意一下;是不是很簡單呢,要停止的時候也是相當簡單,例如下面的方式
{
if (Sensor != null)
{
Sensor.Stop();
sender = null;
tbState.Text = "Accelermoter detect stoped";
}
}
catch (AccelerometerFailedException)
{
tbState.Text = "Stop Acceleromter error";
}
能夠抓到數值之後,就可以再做進一步的處理,例如滾動的球或是遊戲等等了,下一篇我們再來試試看讓element在畫面上移動吧 :)
下面這邊也有篇很棒的介紹文章,不要錯過了喔
Using the Accelerometer in Silverlight for Windows Phone