Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Класс Compass позволяет отслеживать направление устройства на северный магнитный полюс.
Начало работы
Чтобы начать использовать этот API, ознакомьтесь с руководством по началу работы с Xamarin.Essentials, чтобы правильно настроить и установить библиотеку в проектах.
Использование класса Compass
Добавьте ссылку на Xamarin.Essentials в своем классе:
using Xamarin.Essentials;
Функции Compass выполняются при вызове методов Start и Stop для ожидания передачи данных об изменениях данных компаса. Все изменения возвращаются через событие ReadingChanged. Рассмотрим пример:
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
}
}
}
Скорость датчика
- Fastest (Максимальная) — максимально быстрое получение данных датчика (возврат в поток пользовательского интерфейса не гарантирован).
- Game (Игра) — скорость, подходящая для игр (возврат в поток пользовательского интерфейса не гарантирован).
- Normal (Нормальная) — скорость по умолчанию, которая подходит для изменений ориентации экрана.
- UI (Пользовательский интерфейс) — скорость, которая подходит для типичного пользовательского интерфейса.
Если нет гарантии, что обработчик событий будет запущен в потоке пользовательского интерфейса, и этому обработчику событий требуется доступ к элементам интерфейса, используйте метод MainThread.BeginInvokeOnMainThread для запуска кода в потоке пользовательского интерфейса.
Особенности реализации для платформ
Android не предоставляет API для получения данных о направлении компаса. Для вычисления направления на северный магнитный полюс используются акселерометр и магнитометр. Именно такой поход рекомендует Google.
В редких случаях вы можете увидеть непоследовательные результаты, так как датчики нужно калибровать, что предполагает перемещение устройства "по восьмерке". Лучше всего открыть Карты Google, коснуться точки своего расположения и выбрать калибровку компаса.
При запуске из приложения одновременно множества датчиков возможно изменение их скорости.
Фильтр нижних частот
Из-за способа обновления и вычисления значений компаса Android может потребоваться сглаживание значений. Вы можете применить низкочастотный фильтр, который усредняет значения синуса и косинуса углов и может быть включен с помощью перегрузки метода Start, принимающего параметр bool applyLowPassFilter:
Compass.Start(SensorSpeed.UI, applyLowPassFilter: true);
Это работает только на платформе Android. На iOS и UWP параметр игнорируется. Дополнительные сведения можно найти здесь.