Xamarin.Essentials:シェイクの検出

Accelerometer クラスでは、デバイスの加速度を 3 次元空間で示す、デバイスの加速度計センサーを監視できます。 また、ユーザーがデバイスを振るイベントを登録できます。

作業開始

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

Detect Shake の使用

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

using Xamarin.Essentials;

デバイスの揺れを検出するには、Accelerometer 機能を使用する必要があります。具体的には、Start メソッドと Stop メソッドを呼び出すことで、加速の変化を待ち受け、揺れを検出します。 揺れが検出されるたびに ShakeDetected イベントが始動します。 SensorSpeed には Game またはそれより高速を使うことをお勧めします。 以下がサンプルの使用方法です。


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

センサーの速度

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

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

実装の詳細

Detect Shake API では、加速度計で読み取られた値が未加工のまま使用され、加速が計算されます。 単純なキュー メカニズムを利用し、最近の加速度計イベントの 3/4 が最後の 0.5 秒以内に発生したかどうかを検出します。 加速は、加速度計から読み取った X、Y、Z 値の自乗を加算し、それを特定のしきい値と比較することで計算されます。

API

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