Xamarin.Essentials:指南針
羅盤類別可讓您監視裝置的磁北方位。
開始使用
若要開始使用此 API,請閱讀 入門指南Xamarin.Essentials,以確保連結庫已正確安裝並設定在您的專案中。
使用羅盤
在類別中新增 的 Xamarin.Essentials 參考:
using Xamarin.Essentials;
羅盤功能的運作方式是呼叫 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
}
}
}
感應器速度
- 最快 – 以最快的方式取得感應器資料 (不保證在 UI 執行緒上傳回)。
- 遊戲 – 適合遊戲的費率 (不保證在 UI 執行緒上傳回)。
- 預設值 – 適合螢幕方向變更的預設速率。
- UI – 適合一般使用者介面的費率。
若您的事件處理常式不保證在 UI 執行緒上執行,且若事件處理常式需要存取使用者介面元素,請使用 MainThread.BeginInvokeOnMainThread
方法在 UI 執行緒上執行程式碼。
平台實作特性
Android 不提供用來擷取指南針標題的 API。 我們利用加速計和磁力計來計算磁北方位,這個方法由 Google 推薦。
在罕見情況下,您可能會看到不一致的結果,代表感應器需要校正,這涉及以 8 字形移動您的裝置。 最佳方法是開啟 Google 地圖、點選您所在位置的點,然後選取 [校正羅盤]。
同時從您的應用程式執行多個感測器可能會調整感測器速度。
低通濾器
由於 Android 羅盤值的更新和計算方式,可能需要將值平滑。 您可以套用低傳遞篩選,以平均角度的正弦值和餘弦值,bool applyLowPassFilter
而且可以使用接受 參數的方法多載來開啟Start
:
Compass.Start(SensorSpeed.UI, applyLowPassFilter: true);
僅會在 Android 平台上套用此項,在 iOS 及 UWP 上則會略過此參數。 可以在這裡閱讀詳細資訊。