OrientationSensor Class

Definition

Represents an orientation sensor.

This sensor returns a rotation matrix and a Quaternion that can be used to adjust the user's perspective in a game application.

For an example implementation, see the orientation sensor sample.

public ref class OrientationSensor sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class OrientationSensor final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class OrientationSensor
Public NotInheritable Class OrientationSensor
Inheritance
Object Platform::Object IInspectable OrientationSensor
Attributes

Windows requirements

Device family
Windows 10 (introduced in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduced in v1.0)

Remarks

Sensor data is provided relative to the device's fixed sensor coordinate system, and is independent of display orientation. For applications that rely on sensor data for input control or to manipulate elements on the screen, the developer must take current display orientation into account and compensate the data appropriately. For more info about the sensor coordinate system, see Sensor data and display orientation.

The following example demonstrates how a UWP app built with XAML and C# uses the GetDefault method to establish a connection to an orientation sensor. If no orientation sensor is found, the method will return a null value.

_sensor = OrientationSensor.GetDefault();

The following example demonstrates how a UWP app built with XAML registers a ReadingChanged event handler.

private void ScenarioEnable(object sender, RoutedEventArgs e)
{
    if (_sensor != null)
    {
        // Establish the report interval
        _sensor.ReportInterval = _desiredReportInterval;

        Window.Current.VisibilityChanged += new WindowVisibilityChangedEventHandler(VisibilityChanged);
        _sensor.ReadingChanged += new TypedEventHandler<OrientationSensor, OrientationSensorReadingChangedEventArgs>(ReadingChanged);

        ScenarioEnableButton.IsEnabled = false;
        ScenarioDisableButton.IsEnabled = true;
    }
    else
    {
        rootPage.NotifyUser("No orientation sensor found", NotifyType.StatusMessage);
    }
}

The following example shows the ReadingChanged event handler.

async private void ReadingChanged(object sender, OrientationSensorReadingChangedEventArgs e)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        OrientationSensorReading reading = e.Reading;

        // Quaternion values
        SensorQuaternion quaternion = reading.Quaternion;   // get a reference to the object to avoid re-creating it for each access
        ScenarioOutput_X.Text = String.Format("{0,8:0.00000}", quaternion.X);
        ScenarioOutput_Y.Text = String.Format("{0,8:0.00000}", quaternion.Y);
        ScenarioOutput_Z.Text = String.Format("{0,8:0.00000}", quaternion.Z);
        ScenarioOutput_W.Text = String.Format("{0,8:0.00000}", quaternion.W);

        // Rotation Matrix values
        SensorRotationMatrix rotationMatrix = reading.RotationMatrix;
        ScenarioOutput_M11.Text = String.Format("{0,8:0.00000}", rotationMatrix.M11);
        ScenarioOutput_M12.Text = String.Format("{0,8:0.00000}", rotationMatrix.M12);
        ScenarioOutput_M13.Text = String.Format("{0,8:0.00000}", rotationMatrix.M13);
        ScenarioOutput_M21.Text = String.Format("{0,8:0.00000}", rotationMatrix.M21);
        ScenarioOutput_M22.Text = String.Format("{0,8:0.00000}", rotationMatrix.M22);
        ScenarioOutput_M23.Text = String.Format("{0,8:0.00000}", rotationMatrix.M23);
        ScenarioOutput_M31.Text = String.Format("{0,8:0.00000}", rotationMatrix.M31);
        ScenarioOutput_M32.Text = String.Format("{0,8:0.00000}", rotationMatrix.M32);
        ScenarioOutput_M33.Text = String.Format("{0,8:0.00000}", rotationMatrix.M33);
    });
}

Version history

Windows version SDK version Value added
1607 14393 GetDefault(SensorReadingType)
1607 14393 GetDefault(SensorReadingType,SensorOptimizationGoal)
1709 16299 FromIdAsync
1709 16299 GetDeviceSelector(SensorReadingType)
1709 16299 GetDeviceSelector(SensorReadingType,SensorOptimizationGoal)
1709 16299 MaxBatchSize
1709 16299 ReportLatency

Properties

DeviceId

Gets the device identifier.

MaxBatchSize

Gets the maximum number of events that can be batched by the sensor.

MinimumReportInterval

Gets the minimum report interval supported by the sensor.

ReadingTransform

Gets or sets the transformation that needs to be applied to sensor data. Transformations to be applied are tied to the display orientation with which to align the sensor data.

ReadingType

Gets the sensor reading type.

ReportInterval

Gets or sets the report interval supported by the sensor.

ReportLatency

Gets or sets the delay between batches of sensor information.

Methods

FromIdAsync(String)

Asynchronously obtains the sensor from its identifier.

GetCurrentReading()

Gets the current sensor reading.

GetDefault()

Returns the default orientation sensor for absolute readings.

GetDefault(SensorReadingType)

Returns the default orientation sensor, taking into account accuracy preferences.

GetDefault(SensorReadingType, SensorOptimizationGoal)

Returns the default orientation sensor, taking into account power and accuracy preferences.

GetDefaultForRelativeReadings()

Returns the default orientation sensor for relative readings.

GetDeviceSelector(SensorReadingType)

Gets the device selector.

GetDeviceSelector(SensorReadingType, SensorOptimizationGoal)

Gets the device selector.

Events

ReadingChanged

Occurs each time the orientation sensor reports a new sensor reading.

Applies to

See also