Udostępnij za pośrednictwem


Podsumowanie rozdziału 9. Wywołania interfejsów API specyficznych dla platformy

Uwaga

Ta książka została opublikowana wiosną 2016 roku i od tego czasu nie została zaktualizowana. Jest wiele w książce, która pozostaje cenna, ale niektóre materiały są nieaktualne, a niektóre tematy nie są już całkowicie poprawne ani kompletne.

Czasami konieczne jest uruchomienie kodu, który różni się w zależności od platformy. W tym rozdziale omówiono techniki.

Wstępne przetwarzanie w projekcie współużytkowanego zasobu

Projekt Xamarin.Forms współużytkowanego zasobu może wykonywać inny kod dla każdej platformy przy użyciu dyrektyw #ifpreprocesora języka C# , #elifi endif. Przedstawiono to w elemecie PlatInfoSap1:

Potrójny zrzut ekranu przedstawiający akapit sformatowany w zmiennej

Jednak wynikowy kod może być brzydki i trudny do odczytania.

Klasy równoległe w projekcie współużytkowanego zasobu

Bardziej ustrukturyzowane podejście do wykonywania kodu specyficznego dla platformy w oprogramowaniu SAP przedstawiono w przykładzie PlatInfoSap2 . Każdy projekt platformy zawiera identycznie nazwaną klasę i metody, ale zaimplementowany dla tej konkretnej platformy. Następnie sap tworzy wystąpienie klasy i wywołuje metodę .

DependencyService i przenośna biblioteka klas

Uwaga

Biblioteki klas przenośnych zostały zastąpione przez biblioteki .NET Standard. Cały przykładowy kod z książki został przekonwertowany w celu używania bibliotek standardowych platformy .NET.

Biblioteka zwykle nie może uzyskiwać dostępu do klas w projektach aplikacji. To ograniczenie wydaje się uniemożliwiać korzystanie z techniki przedstawionej w bibliotece PlatInfoSap2 . Xamarin.Forms Zawiera jednak klasę o nazwie DependencyService , która używa odbicia platformy .NET do uzyskiwania dostępu do klas publicznych w projekcie aplikacji z biblioteki.

Biblioteka musi zdefiniować element interface z elementami członkowskimi, których musi używać na każdej platformie. Następnie każda z platform zawiera implementację tego interfejsu. Klasa, która implementuje interfejs, musi być identyfikowana z atrybutem DependencyAttribute na poziomie zestawu.

Następnie biblioteka używa ogólnej Get metody DependencyService w celu uzyskania wystąpienia klasy platformy, które implementuje interfejs.

Jest to pokazane w przykładzie DisplayPlatformInfo .

Generowanie dźwięku specyficznego dla platformy

Przykład MonkeyTapWithSound dodaje sygnały dźwiękowe do programu MonkeyTap, uzyskując dostęp do obiektów generowania dźwięku na każdej platformie.