Xamarin.Essentials:Detect ShakeXamarin.Essentials: Detect Shake

Accelerometer クラスでは、デバイスの加速度を 3 次元空間で示す、デバイスの加速度計センサーを監視できます。The Accelerometer class lets you monitor the device's accelerometer sensor, which indicates the acceleration of the device in three-dimensional space. また、ユーザーがデバイスを振るイベントを登録できます。Additionally, it enables you to register for events when the user shakes the device.

作業開始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.

Detect Shake の使用Using Detect Shake

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

using Xamarin.Essentials;

デバイスの揺れを検出するには、Accelerometer 機能を使用する必要があります。具体的には、Start メソッドと Stop メソッドを呼び出すことで、加速の変化を待ち受け、揺れを検出します。To detect a shake of the device you must use the Accelerometer functionality by calling the Start and Stop methods to listen for changes to the acceleration and to detect a shake. 揺れが検出されるたびに ShakeDetected イベントが始動します。Any time a shake is detected a ShakeDetected event will fire. SensorSpeed には Game またはそれより高速を使うことをお勧めします。It is recommended to use Game or faster for the SensorSpeed. 以下がサンプルの使用方法です。Here is sample usage:


public class DetectShakeTest
{
    // Set speed delay for monitoring changes.
    SensorSpeed speed = SensorSpeed.Game;

    public DetectShakeTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        Accelerometer.ShakeDetected  += Accelerometer_ShakeDetected ;
    }

    void Accelerometer_ShakeDetected (object sender, EventArgs e)
    {
        // Process shake event
    }

    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.
        }
    }
}

センサーの速度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.

実装の詳細Implementation Details

Detect Shake API では、加速度計で読み取られた値が未加工のまま使用され、加速が計算されます。The detect shake API uses raw readings from the accelerometer to calculate acceleration. 単純なキュー メカニズムを利用し、最近の加速度計イベントの 3/4 が最後の 0.5 秒以内に発生したかどうかを検出します。It uses a simple queue mechanism to detect if 3/4ths of the recent accelerometer events occurred in the last half second. 加速は、加速度計から読み取った X、Y、Z 値の自乗を加算し、それを特定のしきい値と比較することで計算されます。Acceleration is calculated by adding the square of the X, Y, and Z readings from the accelerometer and comparing it to a specific threashold.

APIAPI

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