【Windows Phone 8】加速計
前言:
這加速計的範例是小弟以前玩【Phone 7】看書時小小玩的一個範例,沒想到在【Phone 8】依然可行,
但是系統會警告accelerometer_ReadingChanged已過時在此版本不適用,
建議使用Microsoft.Devices.Sensors.SensorBase<TSensorsReading>.CurrentValueChanged事件。
參考【Windows Phone Mango 應用程式開發 使用Visual Studio】【高雪松】編著 【佳魁資訊】出版
實作:
在頁面中加入下列Xaml
<StackPanel>
<StackPanel Orientation="Horizontal" >
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="X:" VerticalAlignment="Top" FontSize="{StaticResource PhoneFontSizeLarge}"/>
<TextBlock x:Name="TB_X" HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top" FontSize="{StaticResource PhoneFontSizeLarge}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" >
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Y:" VerticalAlignment="Top" FontSize="{StaticResource PhoneFontSizeLarge}"/>
<TextBlock x:Name="TB_Y" HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top" FontSize="{StaticResource PhoneFontSizeLarge}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" >
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Z:" VerticalAlignment="Top" FontSize="{StaticResource PhoneFontSizeLarge}"/>
<TextBlock x:Name="TB_Z" HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top" FontSize="{StaticResource PhoneFontSizeLarge}"/>
</StackPanel>
<TextBlock x:Name="T" HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top" FontSize="{StaticResource PhoneFontSizeLarge}"/>
</StackPanel>
Step-1 設定【全域】變數
說明:此變數是建立加速計存取權
Accelerometer accelerometer;
Step-2 設置啟動與關閉事件(測試方便啟動與關閉整合為一個AppBarButton)
註:這裡就不從建AppBarButton開始做起直接從事件內程式碼開始
說明:如沒有權限按下按鈕將權限開啟並建立accelerometer_ReadingChanged事件,
若以開啟權限按下按鈕則將關閉。
if (accelerometer == null)
{
accelerometer = new Accelerometer();
accelerometer.ReadingChanged += accelerometer_ReadingChanged;
try
{
accelerometer.Start();
T.Text = "啟動";
}
catch
{
T.Text = "失敗";
}
}
else
{
try
{
accelerometer.Stop();
T.Text = "關閉";
accelerometer = null;
}
catch
{
T.Text = "失敗";
}
}
Step-3 accelerometer_ReadingChanged方法
說明:利用非同步的方式進行事件委派
void accelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(()=>Show(e));
}
Step-4 非同步委派方法
void Show(AccelerometerReadingEventArgs e)
{
if (accelerometer != null)
{
TB_X.Text = e.X.ToString("0.000");
TB_Y.Text = e.Y.ToString("0.000");
TB_Z.Text = e.Z.ToString("0.000");
}
}
執行結果: