영어로 읽기

다음을 통해 공유


Xamarin.Essentials:나침반

Compass 클래스를 사용하면 디바이스의 자기 북쪽 방향을 모니터링할 수 있습니다.

시작하기

이 API를 사용하기 전에 라이브러리가 제대로 설치되고 프로젝트에 설정되어 있는지 확인하기 위해 Xamarin.Essentials에 대한 시작 가이드를 읽어보세요.

나침반 사용

클래스에서 Xamarin.Essentials에 대한 참조를 추가합니다.

C#
using Xamarin.Essentials;

나침반 기능은 나침반에 대한 변경 내용을 수신 대기하는 StartStop 메서드를 호출하여 작동합니다. ReadingChanged 이벤트를 통해 변경 내용을 다시 전송합니다. 예를 들어 다음과 같습니다.

C#
public class CompassTest
{
    // Set speed delay for monitoring changes.
    SensorSpeed speed = SensorSpeed.UI;

    public CompassTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        Compass.ReadingChanged += Compass_ReadingChanged;
    }

    void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
    {
        var data = e.Reading;
        Console.WriteLine($"Reading: {data.HeadingMagneticNorth} degrees");
        // Process Heading Magnetic North
    }

    public void ToggleCompass()
    {
        try
        {
            if (Compass.IsMonitoring)
              Compass.Stop();
            else
              Compass.Start(speed);
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature not supported on device
        }
        catch (Exception ex)
        {
            // Some other exception has occurred
        }
    }
}
  • 가장 빠름 – 센서 데이터를 가장 빠르게 가져옵니다(UI 스레드에 반환이 보장되지 않음).
  • 게임 – 게임에 적합한 속도(UI 스레드에 반환이 보장되지 않음).
  • 기본값 - 화면 방향 변경에 적합한 기본 속도입니다.
  • UI - 일반 사용자 인터페이스에 적합한 속도입니다.

이벤트 처리기가 UI 스레드에서 실행하도록 보장되지 않고 사용자 인터페이스 요소에 액세스해야 하는 경우 MainThread.BeginInvokeOnMainThread 메서드를 사용하여 UI 스레드에서 해당 코드를 실행하세요.

플랫폼 구현 관련 정보

Android는 나침반 방향을 검색하기 위한 API를 제공하지 않습니다. 가속도계 및 지자기 센터를 활용하여 Google에서 추천하는 자기 북쪽 방향을 계산합니다.

드문 경우지만, 센서를 보정하려면 그림 8의 움직임으로 디바이스를 이동해야 하므로 일관되지 않은 결과가 표시될 수 있습니다. 이 작업을 수행하는 가장 좋은 방법은 Google Maps를 열고, 현재 위치의 점을 탭하고, 나침반 보정을 선택하는 것입니다.

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

저역 필터

Android 나침반 값이 업데이트 및 계산되는 방법으로 인해 값을 평준화해야 할 수 있습니다. ‘저역 필터’는 각도의 사인 및 코사인 값 평균을 계산하기 위해 적용할 수 있고 bool applyLowPassFilter 매개 변수를 허용하는 Start 메서드 오버로드를 사용하여 켤 수 있습니다.

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

이는 Android 플랫폼에만 적용되며 iOS 및 UWP에서는 매개 변수가 무시됩니다. 자세한 내용은 여기에서 참조할 수 있습니다.

API

Channel 9YouTube에서 더 많은 Xamarin 비디오를 확인하세요.