디바이스 센서 액세스

Browse sample. 샘플 찾아보기

디바이스에는 사용할 수 있는 모든 종류의 센서가 있습니다. 일부 센서는 움직임을 감지할 수 있고, 다른 센서는 빛과 같은 환경의 변화를 감지할 수 있습니다. 이러한 센서를 모니터링하고 반응하면 디바이스가 사용되는 방식에 맞게 앱이 동적으로 조정됩니다. 센서의 변경 내용에 응답하고 사용자에게 경고할 수도 있습니다. 이 문서에서는 .NET 다중 플랫폼 앱 UI(.NET MAUI)에서 지원하는 일반적인 센서에 대한 간략한 개요를 제공합니다.

디바이스 센서 관련 형식은 네임스페이 Microsoft.Maui.Devices.Sensors 스에서 사용할 수 있습니다.

센서 속도

센서 속도는 센서가 데이터를 앱에 반환하는 속도를 설정합니다. 센서를 시작하면 원하는 센서 속도를 열거형으로 SensorSpeed 제공합니다.

  • Fastest
    센서 데이터를 최대한 빨리 가져옵니다(UI 스레드에서 반환되지 않음).

  • Game
    게임에 적합한 속도입니다(UI 스레드에서 반환되지 않음).

  • UI
    일반 사용자 인터페이스에 적합한 속도입니다.

  • Default
    화면 방향 변경에 적합한 기본 속도입니다.

Warning

너무 많은 센서를 한 번에 모니터링하면 앱에 반환되는 속도 센서 데이터에 영향을 줄 수 있습니다.

.NET 8 SensorSpeed 에서는 모든 플랫폼에서 간격이 동일합니다.

  • Default 는 200ms의 간격을 사용합니다.
  • UI 는 60ms 간격을 사용합니다.
  • Game 는 20ms 간격을 사용합니다.
  • Fastest 는 5ms 간격을 사용합니다.

센서 이벤트 처리기

속도 또는 속도가 있는 Game 센서에 추가된 이벤트 처리기는 UI 스레드에서 실행되도록 보장되지 않습니다.Fastest 이벤트 처리기가 사용자 인터페이스 요소에 액세스해야 하는 경우 메서드를 MainThread.BeginInvokeOnMainThread 사용하여 UI 스레드에서 해당 코드를 실행합니다.

가속도계

가속도계 센서는 세 축을 따라 디바이스의 가속도를 측정합니다. 센서에서 보고한 데이터는 사용자가 디바이스를 이동하는 방법을 나타냅니다.

인터페이스는 IAccelerometer 센서에 대한 액세스를 제공하며 속성을 통해 Accelerometer.Default 사용할 수 있습니다. IAccelerometer 인터페이스와 Accelerometer 클래스는 모두 네임스페이스에 Microsoft.Maui.Devices.Sensors 포함됩니다.

시작하기

가속도계 기능에 액세스하려면 다음 플랫폼별 설정이 필요할 수 있습니다.

앱이 Android 12 이상(API 31 이상)을 대상으로 하는 경우 시스템은 이 센서의 데이터 새로 고침 속도에 200Hz 제한을 적용합니다. 앱이 센서 속도를 사용하여 Fastest 센서 데이터를 수집해야 하는 경우 사용 권한을 선언 HIGH_SAMPLING_RATE_SENSORS 해야 합니다. 다음과 같은 방법으로 권한을 구성할 수 있습니다.

  • 어셈블리 기반 권한을 추가합니다.

    Platforms/Android/MainApplication.cs 파일을 열고 지시문 다음에 using 다음 어셈블리 특성을 추가합니다.

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - 또는 -

  • Android 매니페스트를 업데이트합니다.

    Platforms/Android/AndroidManifest.xml 파일을 열고 노드에 manifest 다음 줄을 추가합니다.

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - 또는 -

  • 매니페스트 편집기에서 Android 매니페스트를 업데이트합니다.

    Visual Studio에서 Platforms/Android/AndroidManifest.xml 파일을 두 번 클릭하여 Android 매니페스트 편집기를 엽니다. 그런 다음 필수 권한에서 HIGH_SAMPLING_RATE_SENSORS 권한을 검사. 그러면 AndroidManifest.xml 파일이 자동으로 업데이트됩니다.

참고 항목

사용자가 디바이스 토글을 사용하여 마이크 액세스를 해제하는 경우 사용 권한 선언 HIGH_SAMPLING_RATE_SENSORS 여부에 관계없이 동작 및 위치 센서는 항상 속도가 제한됩니다.

가속도계 센서 모니터링

가속도계 센서 모니터링을 시작하려면 메서드를 호출합니다 IAccelerometer.Start . .NET MAUI는 이벤트를 발생시켜 가속도계 데이터 변경 내용을 앱에 보냅니다 IAccelerometer.ReadingChanged . 이 IAccelerometer.Stop 방법을 사용하여 센서 모니터링을 중지합니다. 가속도계가 시작되고 현재 모니터링 중인 경우 속성으로 IAccelerometer.IsMonitoring 가속도계의 모니터링 상태를 감지할 true 수 있습니다.

다음 코드 예제에서는 가속도계에서 변경 내용을 모니터링하는 방법을 보여 줍니다.

public void ToggleAccelerometer()
{
    if (Accelerometer.Default.IsSupported)
    {
        if (!Accelerometer.Default.IsMonitoring)
        {
            // Turn on accelerometer
            Accelerometer.Default.ReadingChanged += Accelerometer_ReadingChanged;
            Accelerometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off accelerometer
            Accelerometer.Default.Stop();
            Accelerometer.Default.ReadingChanged -= Accelerometer_ReadingChanged;
        }
    }    
}

private void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
{
    // Update UI Label with accelerometer state
    AccelLabel.TextColor = Colors.Green;
    AccelLabel.Text = $"Accel: {e.Reading}";
}

가속도계 판독값은 G에서 다시 보고됩니다. G는 지구의 중력 필드에 의해 가해지는 중력과 동일한 중력의 단위입니다 $(9.81 m/s^2)$.

좌표계는 기본 방향으로 디바이스의 화면을 기준으로 정의됩니다. 축은 디바이스의 화면 방향이 변경될 때 교환되지 않습니다.

X축은 가로이고 오른쪽을 가리키며, Y축은 세로이고 위쪽을 가리키고 Z축은 화면 앞면 바깥쪽을 가리킵니다. 이 시스템에서 화면 뒤의 좌표에는 음 수 Z 값이 있습니다.

예:

  • 디바이스가 테이블에 평평하게 놓여 있고 왼쪽에서 오른쪽으로 밀면 X 가속 값이 양수입니다.

  • 디바이스가 테이블에 평평하게 놓이면 가속 값은 +1.00G 또는 $(+9.81 m/s^2)$이며, 이는 디바이스 $(0 m/s^2)$의 가속에서 중력 $(-9.81 m/s^2)$의 힘을 뺀 값이며 G에서와 같이 정규화됩니다.

  • 디바이스가 테이블에 평평하게 놓여 있고 A $m/s^2$의 가속으로 하늘쪽으로 푸시되는 경우 가속 값은 디바이스 $(+A m/s^2)$의 가속에 해당하는 $A+9.81$와 같으며 중력 $(-9.81 m/s^2)$ 및 G에서 정규화됩니다.

플랫폼별 정보(가속도계)

가속도계 센서와 관련된 플랫폼별 정보는 없습니다.

Barometer

기압계 센서는 주변 기압을 측정합니다. 센서가 보고한 데이터는 현재 기압을 나타냅니다. 이 데이터는 센서 모니터링을 처음 시작한 다음 압력이 변경 될 때마다 보고됩니다.

인터페이스는 IBarometer 센서에 대한 액세스를 제공하며 속성을 통해 Barometer.Default 사용할 수 있습니다. IBarometer 인터페이스와 Barometer 클래스는 모두 네임스페이스에 Microsoft.Maui.Devices.Sensors 포함됩니다.

기압계 센서 모니터링을 시작하려면 메서드를 호출합니다 IBarometer.Start . .NET MAUI는 이벤트를 발생시켜 기압 판독값을 앱에 보냅니다 IBarometer.ReadingChanged . 이 IBarometer.Stop 방법을 사용하여 센서 모니터링을 중지합니다. 기압계가 현재 모니터링 중인 경우 속성으로 IBarometer.IsMonitoring 기압계의 모니터링 상태를 감지할 true 수 있습니다.

압력 판독값은 헥토파스칼로 표시됩니다.

다음 코드 예제에서는 기압계에서 변경 내용을 모니터링하는 방법을 보여 줍니다.

public void ToggleBarometer()
{
    if (Barometer.Default.IsSupported)
    {
        if (!Barometer.Default.IsMonitoring)
        {
            // Turn on barometer
            Barometer.Default.ReadingChanged += Barometer_ReadingChanged;
            Barometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off barometer
            Barometer.Default.Stop();
            Barometer.Default.ReadingChanged -= Barometer_ReadingChanged;
        }
    }
}

private void Barometer_ReadingChanged(object sender, BarometerChangedEventArgs e)
{
    // Update UI Label with barometer state
    BarometerLabel.TextColor = Colors.Green;
    BarometerLabel.Text = $"Barometer: {e.Reading}";
}

플랫폼별 정보(기압계)

이 섹션에서는 기압계 센서와 관련된 플랫폼별 구현 세부 정보를 설명합니다.

플랫폼 특정 구현 세부 정보는 없습니다.

나침반

나침반 센서는 장치의 자기 북쪽 제목을 모니터링합니다.

인터페이스는 ICompass 센서에 대한 액세스를 제공하며 속성을 통해 Compass.Default 사용할 수 있습니다. ICompass 인터페이스와 Compass 클래스는 모두 네임스페이스에 Microsoft.Maui.Devices.Sensors 포함됩니다.

나침반 센서 모니터링을 시작하려면 메서드를 호출합니다 ICompass.Start . .NET MAUI는 나침반 제목이 ICompass.ReadingChanged 변경되면 이벤트를 발생합니다. 이 ICompass.Stop 방법을 사용하여 센서 모니터링을 중지합니다. 나침반이 현재 모니터링되는 경우 속성을 사용하여 나침반 ICompass.IsMonitoring 의 모니터링 상태를 검색할 true 수 있습니다.

다음 코드 예제에서는 나침반에서 변경 내용을 모니터링하는 방법을 보여 줍니다.

private void ToggleCompass()
{
    if (Compass.Default.IsSupported)
    {
        if (!Compass.Default.IsMonitoring)
        {
            // Turn on compass
            Compass.Default.ReadingChanged += Compass_ReadingChanged;
            Compass.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off compass
            Compass.Default.Stop();
            Compass.Default.ReadingChanged -= Compass_ReadingChanged;
        }
    }
}

private void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
    // Update UI Label with compass state
    CompassLabel.TextColor = Colors.Green;
    CompassLabel.Text = $"Compass: {e.Reading}";
}

플랫폼별 정보(나침반)

이 섹션에서는 나침반 기능과 관련된 플랫폼별 구현 세부 정보를 설명합니다.

Android는 나침반 제목을 검색하기 위한 API를 제공하지 않습니다. .NET MAUI는 가속도계 및 자력계 센서를 사용하여 Google에서 권장하는 자기 북쪽 제목을 계산합니다.

드문 경우지만 센서를 보정해야 하기 때문에 일관되지 않은 결과가 표시될 수 있습니다. Android에서 나침반의 재보정은 휴대폰 모델 및 Android 버전에 따라 다릅니다. 나침반을 다시 조정하는 방법에 대한 인터넷을 검색해야 합니다. 다음은 나침반의 재보정에 도움이 될 수 있는 두 개의 링크입니다.

앱에서 여러 센서를 동시에 실행하면 센서 속도가 저하될 수 있습니다.

저가도 필터

Android 나침반 값을 업데이트하고 계산하는 방법 때문에 값을 원활하게 처리해야 할 수 있습니다. 각도의 사인 및 코사인 값의 평균을 계산하고 매개 변수를 허용하는 메서드 오버로드를 사용하여 Start 켤 수 있는 Lowpass 필터를 적용할 수 있습니다.bool applyLowPassFilter

Compass.Default.Start(SensorSpeed.UI, applyLowPassFilter: true);

Android 플랫폼에서만 적용되며 iOS 및 Windows에서 매개 변수가 무시됩니다. 자세한 내용은 이 GitHub 문제 설명을 참조하세요.

흔들다

이 문서에서는 흔들림을 센서로 나열하고 있지만 그렇지 않습니다. 가속도계는 장치가 흔들리는 시기를 감지하는 데 사용됩니다.

인터페이스는 IAccelerometer 센서에 대한 액세스를 제공하며 속성을 통해 Accelerometer.Default 사용할 수 있습니다. IAccelerometer 인터페이스와 Accelerometer 클래스는 모두 네임스페이스에 Microsoft.Maui.Devices.Sensors 포함됩니다.

참고 항목

앱이 센서 속도를 사용하여 Fastest 가속도계 센서 데이터를 수집해야 하는 경우 사용 권한을 선언 HIGH_SAMPLING_RATE_SENSORS 해야 합니다. 자세한 내용은 가속도계를 참조 하세요.

흔들림 탐지 API는 가속도계의 원시 판독값을 사용하여 가속도를 계산합니다. 최근 가속도계 이벤트의 3/4이 마지막 0.5초 동안에 발생했는지를 탐지하기 위해 간단한 큐 메커니즘을 사용합니다. 가속도는 가속도계에서 X, Y 및 Z($x^2+y^2+z^2$) 판독값의 제곱을 추가하고 특정 임계값과 비교하여 계산됩니다.

가속도계 센서 모니터링을 시작하려면 메서드를 호출합니다 IAccelerometer.Start . 흔들림이 감지되면 IAccelerometer.ShakeDetected 이벤트가 발생합니다. 이 IAccelerometer.Stop 방법을 사용하여 센서 모니터링을 중지합니다. 가속도계가 시작되고 현재 모니터링 중인 경우 속성으로 IAccelerometer.IsMonitoring 가속도계의 모니터링 상태를 감지할 true 수 있습니다.

를 사용하거나 더 빠르게 SensorSpeed사용하는 Game 것이 좋습니다.

다음 코드 예제에서는 이벤트에 대한 가속도계를 모니터링하는 방법을 ShakeDetected 보여 줍니다.

private void ToggleShake()
{
    if (Accelerometer.Default.IsSupported)
    {
        if (!Accelerometer.Default.IsMonitoring)
        {
            // Turn on accelerometer
            Accelerometer.Default.ShakeDetected += Accelerometer_ShakeDetected;
            Accelerometer.Default.Start(SensorSpeed.Game);
        }
        else
        {
            // Turn off accelerometer
            Accelerometer.Default.Stop();
            Accelerometer.Default.ShakeDetected -= Accelerometer_ShakeDetected;
        }
    }
}

private void Accelerometer_ShakeDetected(object sender, EventArgs e)
{
    // Update UI Label with a "shaked detected" notice, in a randomized color
    ShakeLabel.TextColor = new Color(Random.Shared.Next(256), Random.Shared.Next(256), Random.Shared.Next(256));
    ShakeLabel.Text = $"Shake detected";
}

플랫폼별 정보(Shake)

가속도계 센서와 관련된 플랫폼별 정보는 없습니다.

자이로스코프

자이로스코프 센서는 디바이스의 세 가지 기본 축 주위의 각도 회전 속도를 측정합니다.

인터페이스는 IGyroscope 센서에 대한 액세스를 제공하며 속성을 통해 Gyroscope.Default 사용할 수 있습니다. IGyroscope 인터페이스와 Gyroscope 클래스는 모두 네임스페이스에 Microsoft.Maui.Devices.Sensors 포함됩니다.

시작하기

자이로스코프 기능에 액세스하려면 다음 플랫폼별 설정이 필요할 수 있습니다.

앱이 Android 12 이상(API 31 이상)을 대상으로 하는 경우 시스템은 이 센서의 데이터 새로 고침 속도에 200Hz 제한을 적용합니다. 앱이 센서 속도를 사용하여 Fastest 센서 데이터를 수집해야 하는 경우 사용 권한을 선언 HIGH_SAMPLING_RATE_SENSORS 해야 합니다. 다음과 같은 방법으로 권한을 구성할 수 있습니다.

  • 어셈블리 기반 권한을 추가합니다.

    Platforms/Android/MainApplication.cs 파일을 열고 지시문 다음에 using 다음 어셈블리 특성을 추가합니다.

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - 또는 -

  • Android 매니페스트를 업데이트합니다.

    Platforms/Android/AndroidManifest.xml 파일을 열고 노드에 manifest 다음 줄을 추가합니다.

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - 또는 -

  • 매니페스트 편집기에서 Android 매니페스트를 업데이트합니다.

    Visual Studio에서 Platforms/Android/AndroidManifest.xml 파일을 두 번 클릭하여 Android 매니페스트 편집기를 엽니다. 그런 다음 필수 권한에서 HIGH_SAMPLING_RATE_SENSORS 권한을 검사. 그러면 AndroidManifest.xml 파일이 자동으로 업데이트됩니다.

참고 항목

사용자가 디바이스 토글을 사용하여 마이크 액세스를 해제하는 경우 사용 권한 선언 HIGH_SAMPLING_RATE_SENSORS 여부에 관계없이 동작 및 위치 센서는 항상 속도가 제한됩니다.

자이로스코프 센서 모니터링

자이로스코프 센서 모니터링을 시작하려면 메서드를 호출합니다 IGyroscope.Start . .NET MAUI는 이벤트를 발생시켜 자이로스코프 데이터 변경 내용을 앱에 보냅니다 IGyroscope.ReadingChanged . 이 이벤트에서 제공하는 데이터는 rad/s(초당 라디안)로 측정됩니다. 이 IGyroscope.Stop 방법을 사용하여 센서 모니터링을 중지합니다. 자이로스코프가 시작되어 현재 모니터링 중인 경우 속성으로 IGyroscope.IsMonitoring 자이로스코프의 모니터링 상태를 감지할 true 수 있습니다.

다음 코드 예제에서는 자이로스코프를 모니터링하는 방법을 보여 줍니다.

private void ToggleGyroscope()
{
    if (Gyroscope.Default.IsSupported)
    {
        if (!Gyroscope.Default.IsMonitoring)
        {
            // Turn on gyroscope
            Gyroscope.Default.ReadingChanged += Gyroscope_ReadingChanged;
            Gyroscope.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off gyroscope
            Gyroscope.Default.Stop();
            Gyroscope.Default.ReadingChanged -= Gyroscope_ReadingChanged;
        }
    }
}

private void Gyroscope_ReadingChanged(object sender, GyroscopeChangedEventArgs e)
{
    // Update UI Label with gyroscope state
    GyroscopeLabel.TextColor = Colors.Green;
    GyroscopeLabel.Text = $"Gyroscope: {e.Reading}";
}

플랫폼별 정보(자이로스코프)

자이로스코프 센서와 관련된 플랫폼별 정보는 없습니다.

Magnetometer

자력계 센서는 지구의 자기장을 기준으로 디바이스의 방향을 나타냅니다.

인터페이스는 IMagnetometer 센서에 대한 액세스를 제공하며 속성을 통해 Magnetometer.Default 사용할 수 있습니다. IMagnetometer 인터페이스와 Magnetometer 클래스는 모두 네임스페이스에 Microsoft.Maui.Devices.Sensors 포함됩니다.

시작하기

자력계 기능에 액세스하려면 다음 플랫폼별 설정이 필요할 수 있습니다.

앱이 Android 12 이상(API 31 이상)을 대상으로 하는 경우 시스템은 이 센서의 데이터 새로 고침 속도에 200Hz 제한을 적용합니다. 앱이 센서 속도를 사용하여 Fastest 센서 데이터를 수집해야 하는 경우 사용 권한을 선언 HIGH_SAMPLING_RATE_SENSORS 해야 합니다. 다음과 같은 방법으로 권한을 구성할 수 있습니다.

  • 어셈블리 기반 권한을 추가합니다.

    Platforms/Android/MainApplication.cs 파일을 열고 지시문 다음에 using 다음 어셈블리 특성을 추가합니다.

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - 또는 -

  • Android 매니페스트를 업데이트합니다.

    Platforms/Android/AndroidManifest.xml 파일을 열고 노드에 manifest 다음 줄을 추가합니다.

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - 또는 -

  • 매니페스트 편집기에서 Android 매니페스트를 업데이트합니다.

    Visual Studio에서 Platforms/Android/AndroidManifest.xml 파일을 두 번 클릭하여 Android 매니페스트 편집기를 엽니다. 그런 다음 필수 권한에서 HIGH_SAMPLING_RATE_SENSORS 권한을 검사. 그러면 AndroidManifest.xml 파일이 자동으로 업데이트됩니다.

참고 항목

사용자가 디바이스 토글을 사용하여 마이크 액세스를 해제하는 경우 사용 권한 선언 HIGH_SAMPLING_RATE_SENSORS 여부에 관계없이 동작 및 위치 센서는 항상 속도가 제한됩니다.

자력계 센서 모니터링

자력계 센서 모니터링을 시작하려면 메서드를 호출합니다 IMagnetometer.Start . .NET MAUI는 이벤트를 발생시켜 자력계 데이터 변경 내용을 앱에 보냅니다 IMagnetometer.ReadingChanged . 이 이벤트에서 제공하는 데이터는 $μT$(마이크로테슬라스)로 측정됩니다. 이 IMagnetometer.Stop 방법을 사용하여 센서 모니터링을 중지합니다. 자력계가 시작되어 현재 모니터링 중인 경우 속성으로 IMagnetometer.IsMonitoring 자력계의 모니터링 상태를 감지할 true 수 있습니다.

다음 코드 예제에서는 자력계 모니터링을 보여 줍니다.

private void ToggleMagnetometer()
{
    if (Magnetometer.Default.IsSupported)
    {
        if (!Magnetometer.Default.IsMonitoring)
        {
            // Turn on magnetometer
            Magnetometer.Default.ReadingChanged += Magnetometer_ReadingChanged;
            Magnetometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off magnetometer
            Magnetometer.Default.Stop();
            Magnetometer.Default.ReadingChanged -= Magnetometer_ReadingChanged;
        }
    }
}

private void Magnetometer_ReadingChanged(object sender, MagnetometerChangedEventArgs e)
{
    // Update UI Label with magnetometer state
    MagnetometerLabel.TextColor = Colors.Green;
    MagnetometerLabel.Text = $"Magnetometer: {e.Reading}";
}

플랫폼별 정보(자력계)

자력계 센서와 관련된 플랫폼별 정보는 없습니다.

Orientation

방향 센서는 3D 공간에서 디바이스의 방향을 모니터링합니다.

참고 항목

이 센서는 디바이스의 비디오 디스플레이가 세로 또는 가로 모드인지 확인하는 데 사용되지 않습니다. 대신 DeviceDisplay.Current.MainDisplayInfo.Orientation 속성을 사용합니다. 자세한 내용은 디바이스 표시 정보를 참조하세요.

인터페이스는 IOrientationSensor 센서에 대한 액세스를 제공하며 속성을 통해 OrientationSensor.Default 사용할 수 있습니다. IOrientationSensor 인터페이스와 OrientationSensor 클래스는 모두 네임스페이스에 Microsoft.Maui.Devices.Sensors 포함됩니다.

방향 센서 모니터링을 시작하려면 메서드를 호출합니다 IOrientationSensor.Start . .NET MAUI는 이벤트를 발생시켜 앱에 방향 데이터 변경 내용을 보냅니다 IOrientationSensor.ReadingChanged . 이 IOrientationSensor.Stop 방법을 사용하여 센서 모니터링을 중지합니다. 속성을 사용하여 방향 IOrientationSensor.IsMonitoring 의 모니터링 상태를 감지할 true 수 있습니다. 이 상태는 방향이 시작되고 현재 모니터링 중인 경우입니다.

다음 코드 예제에서는 방향 센서를 모니터링하는 방법을 보여 줍니다.

private void ToggleOrientation()
{
    if (OrientationSensor.Default.IsSupported)
    {
        if (!OrientationSensor.Default.IsMonitoring)
        {
            // Turn on orientation
            OrientationSensor.Default.ReadingChanged += Orientation_ReadingChanged;
            OrientationSensor.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off orientation
            OrientationSensor.Default.Stop();
            OrientationSensor.Default.ReadingChanged -= Orientation_ReadingChanged;
        }
    }
}

private void Orientation_ReadingChanged(object sender, OrientationSensorChangedEventArgs e)
{
    // Update UI Label with orientation state
    OrientationLabel.TextColor = Colors.Green;
    OrientationLabel.Text = $"Orientation: {e.Reading}";
}

IOrientationSensor 판독값은 두 개의 3D 좌표계를 기준으로 디바이스의 방향을 설명하는 Quaternion 형식으로 다시 보고됩니다.

디바이스(일반적으로 휴대폰 또는 태블릿)에는 다음 축을 포함하는 3D 좌표계가 있습니다.

  • 양수 X축은 세로 모드에서 디스플레이의 오른쪽을 가리킵니다.
  • 양수 Y축은 세로 모드에서 디바이스의 위쪽을 가리킵니다.
  • 양수 Z축은 화면에서 가리킵니다.

지구의 3D 좌표계에는 다음 축이 있습니다.

  • 양수 X축은 지구 표면의 탄젠트이며 동쪽을 가리킵니다.
  • 양수 Y축은 지구 표면에 탄젠트되어 북쪽을 가리킵니다.
  • 양수 Z축은 지구 표면과 수직이며 위쪽을 가리킵니다.

Quaternion은 지구 좌표계를 기준으로 디바이스 좌표계의 회전을 설명합니다.

Quaternion 값은 축을 중심으로 회전하는 경우와 밀접한 관련이 있습니다. 회전 축이 정규화된 벡터($a_x, a_y, a_z$)이고 회전 각도가 $\theta$이면 쿼터니언의 (X, Y, Z, W) 구성 요소는 다음과 같습니다.

$(a_x \times \sin(\theta/2), a_y \times \sin(\theta/2), a_z \times \sin(\theta/2), \cos(\theta/2))$

이는 오른손 좌표계이므로, 오른손 엄지손가락이 회전 축의 양수 방향을 가리킬 때 손가락 곡선은 양수 각도에 대한 회전 방향을 나타냅니다.

예:

  • 디바이스가 화면이 위를 향하도록 테이블에 놓여 있고 디바이스의 위쪽(세로 모드)이 북쪽을 가리키는 경우 두 좌표계가 정렬됩니다. Quaternion 값은 ID 쿼터니언(0, 0, 0, 1)을 나타냅니다. 이 위치를 기준으로 모든 회전을 분석할 수 있습니다.

  • 디바이스가 화면이 위를 향하도록 테이블에 놓여 있고 디바이스의 위쪽(세로 모드)이 서쪽을 가리키는 경우 Quaternion 값은 (0, 0, 0.707, 0.707)입니다. 디바이스가 지구의 Z 축을 중심으로 90도 회전되었습니다.

  • 위쪽(세로 모드)이 하늘을 가리키고 디바이스의 뒤쪽이 북쪽을 향하도록 디바이스를 똑바로 드는 경우 디바이스가 X 축을 중심으로 90도 회전되었습니다. Quaternion 값은 (0.707, 0, 0, 0.707)입니다.

  • 왼쪽 가장자리가 테이블에 있고 위쪽이 북쪽을 가리키도록 디바이스가 배치된 경우 디바이스는 Y축을 중심으로 -90도(또는 음수 Y 축을 중심으로 90도) 회전됩니다. Quaternion 값은 (0, -0.707, 0, 0.707)입니다.

플랫폼별 정보(방향)

방향 센서와 관련된 플랫폼별 정보는 없습니다.