Xamarin.Essentials:检测抖动

Accelerometer 类可用于监视设备的加速计传感器,指示设备在三维空间内的加速度。 此外,该类还能够在用户抖动设备时注册事件。

入门

若要开始使用此 API,请阅读 Xamarin.Essentials 的入门指南,确保在项目中正确安装和设置库。

使用检测抖动

在类中添加对 Xamarin.Essentials 的引用:

using Xamarin.Essentials;

若要检测设备的抖动,必须通过调用 StartStop 方法来使用 Accelerometer 功能,以侦听加速度的变化并检测抖动。 每次检测到抖动时,都会触发 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.
        }
    }
}

传感器速度

  • 最快 – 尽快获取传感器数据(不保证在 UI 线程上返回)。
  • 游戏 – 适合游戏的速度(不保证在 UI 线程上返回)。
  • 默认 - 适合屏幕方向更改的默认速率。
  • UI – 适合常规用户界面的速率。

如果事件处理程序不能保证在 UI 线程上运行,并且如果事件处理程序需要访问用户界面元素,请使用 MainThread.BeginInvokeOnMainThread 方法在 UI 线程上运行该代码。

实现详细信息

检测抖动 API 使用来自加速计的原始读数来计算加速度。 它使用一种简单的队列机制来检测最近加速计事件的 75% 是否发生在最后半秒。 通过将加速计的 X、Y 和 Z 读数的平方相加并将其与特定的阈值进行比较来计算加速度。

API

第 9 频道YouTube 上查找更多 Xamarin 视频。