しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Windows Phone 7 で加速度センサーを使う

加速度センサーは Microsoft.Devices.Sensors.dll に含まれている Microsoft.Devices.Sensors.AccelerometerSensor クラスを使うだけで利用できます。

この AccelerometerSensor クラスもシングルトンになっているので All か Default 静的プロパティを経由してインスタンスを得ます。All にはデバイスに搭載されている全ての加速度センサーが含まれてますが、通常は Default で問題ないと思います。

インスタンスを得たらイベントハンドラを登録し、Start メソッドを呼び出して値の読み込みを開始します。

// 加速度センサーのインスタンスを得る
var accelerometer = AccelerometerSensor.Default;

// 値が変化したことを受け取るイベントハンドラを登録する
accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingAsyncEventArgs>(Accelerometer_ReadingChanged);

// 読み込みを開始する
accelerometer.Start();

イベントハンドラでは AccelerometerReadingAsyncEventArgs から AccelerometerReading を取得します。

private void Accelerometer_ReadingChanged(object sender, AccelerometerReadingAsyncEventArgs e)
{
    // e.Value は Sensor<AccelerometerReading> なのでこうなる
    var reading = e.Value.Value;

    // とりあえず値を表示させる
    Debug.WriteLine("X:{0} Y:{1} Z:{2}", reading.X, reading.Y, reading.Z);
}

AccelerometerReading 構造体は X,Y,Z プロパティを持っているので、あとはアプリ側で好きに利用することができます。