Xamarin.Essentials:加速度計

Accelerometer クラスでは、デバイスの加速度を 3 次元空間で示す、デバイスの加速度計センサーを監視できます。

作業開始

この API の使用を始めるには、Xamarin.Essentials の概要ガイドを読み、ライブラリが正しくインストールされてプロジェクトに設定されていることを確認してください。

加速度計の使用

クラスの Xamarin.Essentials への参照を追加します。

using Xamarin.Essentials;

加速度計の機能は、加速度計の変更をリッスンする StartStop のメソッドを呼び出すことで動作します。 すべての変更は ReadingChanged イベントを通じて戻されます。 以下がサンプルの使用方法です。


public class AccelerometerTest
{
    // Set speed delay for monitoring changes.
    SensorSpeed speed = SensorSpeed.UI;

    public AccelerometerTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        Accelerometer.ReadingChanged += Accelerometer_ReadingChanged;
    }

    void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
    {
        var data = e.Reading;
        Console.WriteLine($"Reading: X: {data.Acceleration.X}, Y: {data.Acceleration.Y}, Z: {data.Acceleration.Z}");
        // Process Acceleration X, Y, and Z
    }

    public void ToggleAccelerometer()
    {
        try
        {
            if (Accelerometer.IsMonitoring)
              Accelerometer.Stop();
            else
              Accelerometer.Start(speed);
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature not supported on device
        }
        catch (Exception ex)
        {
            // Other error has occurred.
        }
    }
}

加速度計の測定値は G の単位で報告されます。A G は地球の重力場にかかる重力 (9.81 m/s^2) と同等の重力の単位です。

座標系は携帯電話の既定の画面の向きを基準にして定義されます。 デバイスの画面の向きが変わっても軸は切り替えられません。

X 軸は水平方向で右に、Y 軸は垂直方向で上に、Z 軸は画面前面から外側に向かいます。 この座標系では、画面より後ろに位置する座標の Z 値は負の値になります。

次に例を示します。

  • テーブルの上に水平に置いたデバイスを、左側から右側に向かって押した場合、X の加速値は正の値になります。

  • デバイスがテーブルの上に水平に置かれている場合、加速値は +1.00 G または (+9.81 m/s^2) になります。これは、デバイスの加速 (0 m/s^2) から重力 (-9.81 m/s^2) を引き、G の単位で正規化したものに相当します。

  • テーブルの上に水平に置いたデバイスを加速度 A m/s^2 で上に持ち上げた場合、加速度の値は A+9.81 と等しくなります。これは、デバイスの加速度 (+A m/s^2) から重力 (-9.81 m/s^2) を引き、G の単位で正規化したものに相当します。

センサーの速度

  • Fastest – センサー データを最高速度で取得します (UI スレッドに返ることが保証されません)。
  • Game – ゲームに適した速度です (UI スレッドに返ることが保証されません)。
  • Default – 画面の向きの変更に適した既定の速度です。
  • UI – 一般的なユーザー インターフェイスに適した速度です。

イベント ハンドラーが UI スレッドでの実行を保証されておらず、そのイベント ハンドラーでユーザー インターフェイス要素にアクセスする必要がある場合は、MainThread.BeginInvokeOnMainThread メソッドを使用してそのコードを UI スレッドで実行します。

API

他の Xamarin ビデオは、Channel 9 および YouTube でご覧いただけます。