Xamarin.Essentials:加速计
Accelerometer 类可用于监视设备的加速计传感器,指示设备在三维空间内的加速度。
入门
若要开始使用此 API,请阅读 Xamarin.Essentials 的入门指南,确保在项目中正确安装和设置库。
使用 Accelerometer
在类中添加对 Xamarin.Essentials 的引用:
using Xamarin.Essentials;
Accelerometer 功能通过调用 Start
和 Stop
方法来侦听加速的变化。 然后通过 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 线程上运行该代码。