Многие устройства на Windows Phone 7 имеют встроенный компас. В последнем обновлении инструментов разработчика для Windows Phone появился API для работы с компасом. В этой заметке я расскажу о нем.
В качестве базового объекта для работы с компасом используется сенсор Compass. Как можно увидеть, этот объект унаследован от SensorBase – базового объекта для всех сенсоров в Windows Phone 7. Не все устройства имеют компас, поэтому перед началом работы следует проверить, имеет ли данное устройство компас. Общая последовательность действий для работы с компасом такова:
Для проверки доступности компаса в устройстве используется статическое свойство 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 e)
{
Dispatcher.BeginInvoke(() =>
{
info.Text = e.SensorReading.TrueHeading.ToString();
});
}