Xamarin.Essentials:加速度計Xamarin.Essentials: Accelerometer

Accelerometer クラスでは、デバイスの加速度を 3 次元空間で示す、デバイスの加速度計センサーを監視できます。The Accelerometer class lets you monitor the device's accelerometer sensor, which indicates the acceleration of the device in three-dimensional space.

作業開始Get started

この API の使用を始めるには、Xamarin.Essentials の概要ガイドを読み、ライブラリが正しくインストールされてプロジェクトに設定されていることを確認してください。To start using this API, read the getting started guide for Xamarin.Essentials to ensure the library is properly installed and set up in your projects.

加速度計の使用Using Accelerometer

自分のクラスの Xamarin.Essentials に参照を追加します。Add a reference to Xamarin.Essentials in your class:

using Xamarin.Essentials;

加速度計の機能は、加速度計の変更をリッスンする StartStop のメソッドを呼び出すことで動作します。The Accelerometer functionality works by calling the Start and Stop methods to listen for changes to the acceleration. すべての変更は ReadingChanged イベントを通じて戻されます。Any changes are sent back through the ReadingChanged event. 以下がサンプルの使用方法です。Here is sample usage:

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()
            if (Accelerometer.IsMonitoring)
        catch (FeatureNotSupportedException fnsEx)
            // Feature not supported on device
        catch (Exception ex)
            // Other error has occurred.

加速度計の測定値は G の単位で報告されます。A G は地球の重力場にかかる重力 (9.81 m/s^2) と同等の重力の単位です。Accelerometer readings are reported back in G. A G is a unit of gravitation force equal to that exerted by the earth's gravitational field (9.81 m/s^2).

座標系は携帯電話の既定の画面の向きを基準にして定義されます。The coordinate-system is defined relative to the screen of the phone in its default orientation. デバイスの画面の向きが変わっても軸は切り替えられません。The axes are not swapped when the device's screen orientation changes.

X 軸は水平方向で右に、Y 軸は垂直方向で上に、Z 軸は画面前面から外側に向かいます。The X axis is horizontal and points to the right, the Y axis is vertical and points up and the Z axis points towards the outside of the front face of the screen. このシステムでは画面より後ろにある座標の Z 値は負の値になります。In this system, coordinates behind the screen have negative Z values.

次に例を示します。 Examples:

  • テーブルの上に水平に置いたデバイスを、左側から右側に向かって押した場合、X の加速値は正の値になります。When the device lies flat on a table and is pushed on its left side toward the right, the x acceleration value is positive.

  • デバイスがテーブルの上に水平に置かれている場合、加速値は +1.00 G または (+9.81 m/s^2) になります。これは、デバイスの加速 (0 m/s^2) から重力 (-9.81 m/s^2) を引き、G の単位で正規化したものに相当します。When the device lies flat on a table, the acceleration value is +1.00 G or (+9.81 m/s^2), which correspond to the acceleration of the device (0 m/s^2) minus the force of gravity (-9.81 m/s^2) and normalized as in G.

  • テーブルの上に水平に置いたデバイスを加速度 A m/s^2 で上に持ち上げた場合、加速度の値は A+9.81 と等しくなります。これは、デバイスの加速度 (+A m/s^2) から重力 (-9.81 m/s^2) を引き、G の単位で正規化したものに相当します。When the device lies flat on a table and is pushed toward the sky with an acceleration of A m/s^2, the acceleration value is equal to A+9.81 which corresponds to the acceleration of the device (+A m/s^2) minus the force of gravity (-9.81 m/s^2) and normalized in G.

センサーの速度Sensor Speed

  • Fastest – センサー データを最高速度で取得します (UI スレッドに返ることが保証されません)。Fastest – Get the sensor data as fast as possible (not guaranteed to return on UI thread).
  • Game – ゲームに適した速度です (UI スレッドに返ることが保証されません)。Game – Rate suitable for games (not guaranteed to return on UI thread).
  • Normal – 画面の向きの変更に適した既定の速度です。Normal – Default rate suitable for screen orientation changes.
  • UI – 一般的なユーザー インターフェイスに適した速度です。UI – Rate suitable for general user interface.

イベント ハンドラーが UI スレッドでの実行を保証されておらず、そのイベント ハンドラーでユーザー インターフェイス要素にアクセスする必要がある場合は、MainThread.BeginInvokeOnMainThread メソッドを使用してそのコードを UI スレッドで実行します。If your event handler is not guaranteed to run on the UI thread, and if the event handler needs to access user-interface elements, use the MainThread.BeginInvokeOnMainThread method to run that code on the UI thread.


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