Shrnutí kapitoly 9. Volání rozhraní API pro konkrétní platformu
Poznámka:
Tato kniha byla publikována na jaře roku 2016 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé a některá témata už nejsou zcela správná nebo úplná.
Někdy je nutné spustit kód, který se liší podle platformy. Tato kapitola zkoumá techniky.
Předběžné zpracování v projektu sdíleného assetu
Projekt Xamarin.Forms sdíleného assetu může pro každou platformu spouštět jiný kód pomocí direktiv #if
preprocesoru jazyka C# , #elif
a endif
. To je znázorněno v PlatInfoSap1:
Výsledný kód ale může být ošklivý a obtížně čitelný.
Paralelní třídy v projektu sdíleného assetu
Strukturovanější přístup k provádění kódu specifického pro platformu v SAP je ukázaný v ukázce PlatInfoSap2. Každý z projektů platformy obsahuje identicky pojmenovanou třídu a metody, ale implementované pro danou konkrétní platformu. SAP pak jednoduše vytvoří instanci třídy a zavolá metodu.
DependencyService a přenosná knihovna tříd
Poznámka:
Přenosné knihovny tříd byly nahrazeny knihovnami .NET Standard. Veškerý vzorový kód z knihy byl převeden na použití standardních knihoven .NET.
Knihovna nemůže normálně přistupovat ke třídám v projektech aplikací. Zdá se, že toto omezení brání tomu, aby se technika zobrazená v platInfoSap2 používala v knihovně. Obsahuje však třídu s názvemDependencyService
, Xamarin.Forms která používá reflexi .NET pro přístup k veřejným třídám v projektu aplikace z knihovny.
Knihovna musí definovat interface
členy, které musí používat v každé platformě. Každá z platforem pak obsahuje implementaci tohoto rozhraní. Třída, která implementuje rozhraní, musí být identifikována pomocí DependencyAttribute na úrovni sestavení.
Knihovna pak použije obecnou Get
metodu DependencyService
k získání instance třídy platformy, která implementuje rozhraní.
To je demonstrováno v ukázce DisplayPlatformInfo .
Generování zvuku specifické pro platformu
Ukázka MonkeyTapWithSound přidává pípnutí do programu MonkeyTap tím, že v každé platformě přistupuje k zařízením pro generování zvuku.