# Source: https://raw.githubusercontent.com/unoplatform/uno/refs/heads/master/doc/articles/features/gyrometer.md

---
uid: Uno.Features.Gyrometer
---

# Gyrometer

> [!TIP]
> This article covers Uno-specific information for Gyrometer. For a full description of the feature and instructions on using it, see [Gyrometer Class](https://learn.microsoft.com/uwp/api/windows.devices.sensors.gyrometer).

* The `Windows.Devices.Sensors.Gyrometer` class allows measuring angular velocity applied on the device.

## Supported features

| Feature          | Windows | Android | iOS | Web (WASM) | macOS | Linux (Skia) | Win 7 (Skia) |
|------------------|---------|---------|-----|------------|-------|--------------|--------------|
| `GetDefault`     | ✔       | ✔       | ✔   | ✔          | ✔     | ✔            | ✔            |
| `ReadingChanged` | ✔       | ✔       | ✔   | ✔          | ✖     | ✖            | ✖            |
| `ReportInterval` | ✔       | ✔       | ✔   | ✔          | ✖     | ✖            | ✖            |

## Using Gyrometer with Uno

* The `GetDefault` method is available on all targets and will return `null` on those which do not support `Gyrometer` or devices that do not have such a sensor.
* Ensure to unsubscribe from the `ReadingChanged` event when you no longer need the readings, so that the sensor is no longer active to avoid unnecessary battery consumption.
* `ReportInterval` property on WASM is currently not supported directly. Uno uses an approximation in the form of raising the `ReadingChanged` event, only when enough time has passed since the last report. The event is raised a bit more often to make sure the gap caused by the filter is not too large, but this is in line with the behavior of Windows' `Gyrometer`.

## Example

### Capturing sensor readings

```csharp
var gyrometer = Gyrometer.GetDefault();
gyrometer.ReadingChanged += Gyrometer_ReadingChanged;

private async void Gyrometer_ReadingChanged(Gyrometer sender, GyrometerReadingChangedEventArgs args)
{
    // If you want to update the UI in some way, ensure the Dispatcher is used,
    // as the ReadingChanged event handler does not run on the UI thread.
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        AngularVelocityX = args.Reading.AngularVelocityX;
        AngularVelocityY = args.Reading.AngularVelocityY;
        AngularVelocityZ = args.Reading.AngularVelocityZ;
        Timestamp = args.Reading.Timestamp.ToString("R");
    });
}
```

### Unsubscribing from the readings

```csharp
gyrometer.ReadingChanged -= Gyrometer_ReadingChanged;
```