Сводная информация о Главе 9. Вызовы API конкретных платформ

Примечание.

Эта книга была опубликована весной 2016 года и с тех пор не обновлялась. Многое в этой книге остается ценным, но некоторые материалы устарели, а некоторые разделы перестали быть полностью верными или полными.

Иногда требуется выполнить код, меняющийся в зависимости от платформы. В этой главе рассматриваются методы.

Предварительная обработка в проекте общих ресурсов

Проект общих ресурсов Xamarin.Forms может выполнять разные коды для каждой платформы с помощью директив препроцессора C# #if, #elif и endif. Это продемонстрировано в PlatInfoSap1:

Тройной снимок экрана с переменным форматированием абзаца

Однако результирующий код может быть трудным для чтения.

Параллельные классы в проекте общих ресурсов

Более структурированный подход к выполнению кода, зависящего от платформы, продемонстрирован в SAP в примере PlatInfoSap2. Каждый из проектов платформы содержит класс и методы с одинаковыми названиями, однако они реализованы для отдельной платформы. Затем SAP просто создает экземпляр класса и вызывает метод.

DependencyService и Переносимая библиотека классов

Примечание.

Переносимые библиотеки классов заменены библиотеками .NET Standard. Все примеры кода в этой книге преобразованы для использования библиотек .NET Standard.

Обычно библиотека не может получить доступ к классам в проектах приложений. По-видимому, это ограничение не позволяет использовать в библиотеке метод, показанный в PlatInfoSap2. Однако Xamarin.Forms содержит класс с именем DependencyService, который использует отражение .NET для доступа к открытым классам в проекте приложения из библиотеки.

Библиотека должна определять interface с элементами, которые она должна использовать на каждой платформе. Затем каждая из платформ содержит реализацию этого интерфейса. Класс, реализующий интерфейс, должен быть идентифицирован на уровне сборки с помощью DependencyAttribute.

Затем, чтобы получить экземпляр класса платформы, реализующего интерфейс, библиотека использует универсальный метод Get из DependencyService.

Это показано в примере DisplayPlatformInfo.

Создание звука для конкретной платформы

Пример MonkeyTapWithSound добавляет звуковые сигналы в программу MonkeyTap, осуществляя доступ к средствам создания звука на каждой платформе.