酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

WindowsストアアプリでAccelerometer(加速度センサー)を使って加速度を取得する

Windows.Devices.Sensors名前空間のAccelerometerクラスは、Windowsストアアプリからデバイスの加速度センサーへアクセスする手段を提供してます。

加速度センサーは、「重力方向に対する傾斜角を計測する」センサーで、現在端末が重力に対してどのような傾きになっているかを人間の扱いやすいように数値として取得することができます。その数値を元に液晶が天を向いている地を向いているなど、デバイスが置かれいる状況を判断することができます。

Windowsストアアプリでの加速度センサーの搭載は、あくまでのオプション扱いなのでデバイスが搭載されているかどうかを調べた上でしか使うことができません。

Windows Phoneにも同名の加速度センサークラスが存在していますが、イベント名やメソッド名が異なっているところに注意してください。

名前空間:Windows.Devices.Sensors

System.Object
 +--Windows.Devices.Sensors.Accelerometer

クラス メンバー

名前 備考
ReadingChanged 値が変わった時に通知されるイベント
Shaken シェイク動作をした時に通知されるイベント
GetCurrentReading センサーの現在値を取得
GetDefault デフォルトの加速度センサーオブジェクトを取得する
MinimumReportInterval 値の最小更新間隔の取得
ReportInterval 値の更新間隔の設定/取得

加速度センサーが使用できるか判定する

Accelerometer.GetDefaultメソッドで、デフォルトの加速度センサーを取得します。PCに加速度センサーが接続されていない場合はnullが返ってきます。

  // デフォルトの加速度センサーを取得する
  var accelerometer = Accelerometer.GetDefault();
  if (accelerometer == null) {
    // デバイスが使えないことをユーザーへ通知する
  }

現在の加速度センサーの値を取得する

常に加速度センサーの変化した値を見張る必要がなく、1度だけ値を取得すれば良い場合は、GetCurrentReadingメソッドを使用します。

端末をテーブルの上に載せて、液晶画面を天に向けて水平にしている時には、下の方向 に対して常に1Gの重力が加わっている状態になっている為にZ方向に-1.00の出力が得られます。逆に液晶画面を地に向けるとZ方向に1.00の出力となります。

  AccelerometerReading reading = null;
  reading = accelerometer.GetCurrentReading();

加速度センサーの値が変化したのを受け取る

加速度センサーから出力される値が変化するとReadingChangedイベントが発生します。ReadingChangedイベントを受信するようにReadingChangedイベントハンドラを設定します。

  // 加速度センサーのイベントを受け取る
  accelerometer.ReadingChanged += accelerometer_ReadingChanged;

AccelerometerReading型の変数accelerometerValueを定義して、加速度センサーの値を保存します。

  // 加速度センサーの結果値
  AccelerometerReading accelerometerValue = null;

  // 加速度センサーの値が変更される度に通知される
  void accelerometer_ReadingChanged(Accelerometer sender, 
    AccelerometerReadingChangedEventArgs args)
  {
    // 加速度センサーの読み取り結果を保存する
    accelerometerValue = args.Reading;
  }