Xamarin.Essentials:检测抖动
Accelerometer 类可用于监视设备的加速计传感器,指示设备在三维空间内的加速度。 此外,该类还能够在用户抖动设备时注册事件。
入门
若要开始使用此 API,请阅读 Xamarin.Essentials 的入门指南,确保在项目中正确安装和设置库。
使用检测抖动
在类中添加对 Xamarin.Essentials 的引用:
using Xamarin.Essentials;
若要检测设备的抖动,必须通过调用 Start
和 Stop
方法来使用 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 读数的平方相加并将其与特定的阈值进行比较来计算加速度。