第 9 章的摘要。 平台特定 API 呼叫

Download Sample 下載範例

注意

這本書於2016年春季出版,此後一直沒有更新。 這本書中有很多仍然有價值,但一些材料已經過時,有些主題不再完全正確或完整。

有時需要執行一些因平臺而異的程序代碼。 本章將探討這些技術。

共用資產專案中的前置處理

Xamarin.Forms共用資產專案可以使用 C# 預處理器指示詞#if#elifendif,為每個平台執行不同的程式碼。 這在 PlatInfoSap1示範:

Triple screenshot of variable formatted paragraph

不過,產生的程序代碼可能很醜陋且難以閱讀。

共用資產專案中的平行類別

PlatInfoSap2 範例會示範在 SAP 中執行平臺特定程式代碼的更結構化方法。 每個平台專案都包含同名的類別和方法,但針對該特定平台實作。 然後,SAP 只會具現化 類別並呼叫 方法。

DependencyService 和可攜式類別庫

注意

可攜式類別庫已由 .NET Standard 連結庫取代。 書籍中的所有範例程式代碼都已轉換為使用 .NET 標準連結庫。

連結庫通常無法存取應用程式專案中的類別。 這項限制似乎可防止 PlatInfoSap2 中顯示的技術用於連結庫中。 不過,包含名為 DependencyService 的類別,Xamarin.Forms該類別會使用 .NET 反映從鏈接庫存取應用程式專案中的公用類別。

連結庫必須定義 interface ,其中包含每個平臺中需要使用的成員。 然後,每個平臺都包含該介面的實作。 實作介面的類別必須以 元件層級的DependencyAttribute 來識別。

連結庫接著會使用的DependencyService泛型Get方法,取得實作 介面之平臺類別的實例。

此範例示範於 DisplayPlatformInfo 範例中。

平臺特定的音效產生

MonkeyTapWithSound 範例會藉由在每個平臺中存取聲音產生設施,將蜂鳴聲新增至 MonkeyTap 程式。