Использование компаса в WP7.5 Mango

Многие устройства на Windows Phone 7 имеют встроенный компас. В последнем обновлении инструментов разработчика для Windows Phone появился API для работы с компасом.

В качестве базового объекта для работы с компасом используется сенсор Compass. Как можно увидеть, этот объект унаследован от SensorBase – базового объекта для всех сенсоров в Windows Phone 7. Не все устройства имеют компас, поэтому перед началом работы следует проверить, имеет ли данное устройство компас. Общая последовательность действий для работы с компасом такова:

  1. Проверка на наличие компаса в устройстве WP7. Если нет, то все остальные действия не выполняются.
  2. Создание объекта Compass.
  3. Подписка на событие изменения направления компаса.
  4. Запуск процесса считывания данных с сенсора.
  5. При необходимости можно также обрабатывать ситуации, когда требуется снять намагниченность устройства.

Для проверки доступности компаса в устройстве используется статическое свойство IsSupported объекта Compass:

if (Compass.IsSupported == true)

Если компас доступен, то создается объект и запускается прослушивание сенсора. При каждом изменении значения сенсора генерируется событие CurrentValueChanged. В обработчике этого события можно получить доступ к объекту CompassReading, который содержит текущее направление компаса.

Следующий код выполняет описанные выше действия:

private Compass _compass;

public MainPage()
{
  InitializeComponent();

  if (Compass.IsSupported == true)
  {
    _compass = new Compass();
    _compass.CurrentValueChanged += ComapssValueChanged;
    _compass.Start();

  }
  else
    MessageBox.Show("Compass is not supported.");

}

private void ComapssValueChanged(object sender, SensorReadingEventArgs<CompassReading> e)
{
  Dispatcher.BeginInvoke(() =>
  {
      info.Text = e.SensorReading.TrueHeading.ToString();
  });
}