加速度センサーの値を取得し、画面に表示します。WindowsPhoneではエミュレータでも加速度センサーの計測が可能です。
<phone:PhoneApplicationPage x:Class="BaseApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <Canvas x:Name="LayoutRoot" Background="Black"></Canvas> </phone:PhoneApplicationPage>>]]></script>
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.Media.Imaging; using System.Windows.Shapes; // 参照に。Microsoft.Devices.Sensorsを追加する。 using Microsoft.Devices.Sensors; using Microsoft.Phone.Controls; using Microsoft.Xna.Framework; namespace BaseApp { // エントリーポイント public partial class MainPage : PhoneApplicationPage { private Accelerometer accelerometer; private Vector3 accelReading = new Vector3(); private TextBlock textBlockX = null; private TextBlock textBlockY = null; private TextBlock textBlockZ = null; // コンストラクタ public MainPage() { // コンポーネントの初期化。 InitializeComponent(); // 初期化完了後に呼ばれるメソッドの登録。 Loaded += OnLoaded; } // 初期化完了後に呼ばれるメソッド。 void OnLoaded(object sender, RoutedEventArgs args) { // 加速度センサーのオブジェクトを生成。 accelerometer = new Accelerometer(); //イベント処理の登録 accelerometer.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(OnCurrentValueChanged); // 計測開始。 accelerometer.Start(); // 計測結果表示用のテキストテキストブロック。 { SolidColorBrush brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 255, 255, 255)); textBlockX = new TextBlock(); textBlockX.FontFamily = new FontFamily("MS ゴシック"); textBlockX.FontSize = 32; textBlockX.Foreground = brush; textBlockX.Text = "X:"; Canvas.SetLeft(textBlockX, 10); Canvas.SetTop(textBlockX, 10); LayoutRoot.Children.Add(textBlockX); textBlockY = new TextBlock(); textBlockY.FontFamily = new FontFamily("MS ゴシック"); textBlockY.FontSize = 32; textBlockY.Foreground = brush; textBlockY.Text = "Y:"; Canvas.SetLeft(textBlockY, 10); Canvas.SetTop(textBlockY, 50); LayoutRoot.Children.Add(textBlockY); textBlockZ = new TextBlock(); textBlockZ.FontFamily = new FontFamily("MS ゴシック"); textBlockZ.FontSize = 32; textBlockZ.Foreground = brush; textBlockZ.Text = "X:"; Canvas.SetLeft(textBlockZ, 10); Canvas.SetTop(textBlockZ, 90); LayoutRoot.Children.Add(textBlockZ); } } // 計測イベント受け取り用メソッド。 private void OnCurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e) { // 非同期呼び出し。 Dispatcher.BeginInvoke(() => ReadinValueChanged( e.SensorReading ) ); } // 加速度センサーのパラメータを取得。 private void ReadinValueChanged(AccelerometerReading reading) { accelReading = reading.Acceleration; textBlockX.Text = "X:" + accelReading.X; textBlockY.Text = "Y:" + accelReading.Y; textBlockZ.Text = "Z:" + accelReading.Z; } } }