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 値の自乗を加算し、それを特定のしきい値と比較することで計算されます。