Xamarin.Essentials:加速计

Accelerometer 类可用于监视设备的加速计传感器,指示设备在三维空间内的加速度。

入门

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

使用 Accelerometer

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

using Xamarin.Essentials;

Accelerometer 功能通过调用 StartStop 方法来侦听加速的变化。 然后通过 ReadingChanged 事件反馈任何变化。 示例用法如下:


public class AccelerometerTest
{
    // Set speed delay for monitoring changes.
    SensorSpeed speed = SensorSpeed.UI;

    public AccelerometerTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        Accelerometer.ReadingChanged += Accelerometer_ReadingChanged;
    }

    void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
    {
        var data = e.Reading;
        Console.WriteLine($"Reading: X: {data.Acceleration.X}, Y: {data.Acceleration.Y}, Z: {data.Acceleration.Z}");
        // Process Acceleration X, Y, and Z
    }

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

Accelerometer 读数以 G 为单位反馈回来。G 是等于地球重力加速度 (9.81 m/s^2) 的重力单位。

相对于手机屏幕的默认方向定义坐标系。 设备的屏幕方向更改时,不会交换轴。

X 轴水平向右,Y 轴垂直向上,Z 轴从屏幕正面指向外。 在此坐标系中,屏幕后方的坐标具有负 Z 值。

示例:

  • 当设备平放在桌面上,并从左侧向右推时,X 轴加速值为正。

  • 当设备平放在桌面上时,加速值为 +1.00 G 或 (+ 9.81 m/s^2),即设备的加速度 (0 m/s^2) 减去重力加速度 (-9.81 m/s ^2),然后以 G 为单位进行标准化。

  • 当设备平放在桌面上,并以 A m/s^2 的加速度向上推时,加速值等于 A+9.81,对应于设备的加速度 (+A m/s^2) 减去重力加速度 (-9.81 m/s ^2),并以 G 为单位规范化。

传感器速度

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

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

API

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