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

---
uid: Uno.Features.OrientationSensor
---

# Orientation sensor

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

* The `Windows.Devices.Sensors.SimpleOrientationSensor` class allows you to determine the general orientation of the device.

## Supported features

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

> [!IMPORTANT]
> The `OrientationChanged` event is not supported by iOS simulators.

## Using SimpleOrientationSensor with Uno

* The `GetDefault` method is available on all targets and will return `null` on those that do not support `SimpleOrientationSensor` or devices that do not have such a sensor.
* Ensure to unsubscribe from the `OrientationChanged` event when you no longer need the readings so that the sensor is no longer active to avoid unnecessary battery consumption.

## Example

### Capturing sensor readings

```csharp
var simpleOrientationSensor = SimpleOrientationSensor.GetDefault();
simpleOrientationSensor.OrientationChanged += SimpleOrientationSensor_OrientationChanged;

private async void SimpleOrientationSensor_OrientationChanged(object sender, SimpleOrientationSensorOrientationChangedEventArgs args)
{
    // If you want to update the UI in some way, ensure the Dispatcher is used,
    // as the OrientationChanged event handler does not run on the UI thread.
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        switch (orientation)
        {
            case SimpleOrientation.NotRotated:
                tb.Text = "Not Rotated";
                break;
            case SimpleOrientation.Rotated90DegreesCounterclockwise:
                tb.Text = "Rotated 90 Degrees Counterclockwise";
                break;
            case SimpleOrientation.Rotated180DegreesCounterclockwise:
                tb.Text = "Rotated 180 Degrees Counterclockwise";
                break;
            case SimpleOrientation.Rotated270DegreesCounterclockwise:
                tb.Text = "Rotated 270 Degrees Counterclockwise";
                break;
            case SimpleOrientation.Faceup:
                tb.Text = "Faceup";
                break;
            case SimpleOrientation.Facedown:
                tb.Text = "Facedown";
                break;
            default:
                tb.Text = "Unknown orientation";
                break;
        }
    });
}
```

### Unsubscribing from the readings

```csharp
simpleOrientationSensor.OrientationChanged -= SimpleOrientationSensor_OrientationChanged;
```