Xamarin.Essentials:Гироскоп
Класс Gyroscope позволяет отслеживать датчик гироскопа устройства, который представляет собой поворот вокруг трех основных осей устройства.
Начало работы
Чтобы начать использовать этот API, ознакомьтесь с руководством по началу работы с Xamarin.Essentials, чтобы правильно настроить и установить библиотеку в проектах.
Использование Gyroscope
Добавьте ссылку на Xamarin.Essentials в своем классе:
using Xamarin.Essentials;
Функция Gyroscope выполняется путем вызова методов Start
и Stop
для ожидания передачи данных об изменениях в гироскопе. Все изменения возвращаются через событие ReadingChanged
в рад/с. Пример использования:
public class GyroscopeTest
{
// Set speed delay for monitoring changes.
SensorSpeed speed = SensorSpeed.UI;
public GyroscopeTest()
{
// Register for reading changes.
Gyroscope.ReadingChanged += Gyroscope_ReadingChanged;
}
void Gyroscope_ReadingChanged(object sender, GyroscopeChangedEventArgs e)
{
var data = e.Reading;
// Process Angular Velocity X, Y, and Z reported in rad/s
Console.WriteLine($"Reading: X: {data.AngularVelocity.X}, Y: {data.AngularVelocity.Y}, Z: {data.AngularVelocity.Z}");
}
public void ToggleGyroscope()
{
try
{
if (Gyroscope.IsMonitoring)
Gyroscope.Stop();
else
Gyroscope.Start(speed);
}
catch (FeatureNotSupportedException fnsEx)
{
// Feature not supported on device
}
catch (Exception ex)
{
// Other error has occurred.
}
}
}
Скорость датчика
- Fastest (Максимальная) — максимально быстрое получение данных датчика (возврат в поток пользовательского интерфейса не гарантирован).
- Game (Игра) — скорость, подходящая для игр (возврат в поток пользовательского интерфейса не гарантирован).
- Normal (Нормальная) — скорость по умолчанию, которая подходит для изменений ориентации экрана.
- UI (Пользовательский интерфейс) — скорость, которая подходит для типичного пользовательского интерфейса.
Если нет гарантии, что обработчик событий будет запущен в потоке пользовательского интерфейса, и этому обработчику событий требуется доступ к элементам интерфейса, используйте метод MainThread.BeginInvokeOnMainThread
для запуска кода в потоке пользовательского интерфейса.