Resumo do Capítulo 9. Chamadas de API específicas à plataforma

Observação

Este livro foi publicado na primavera de 2016, e não foi atualizado desde então. Há muito no livro que permanece valioso, mas parte do material está desatualizado, e alguns tópicos não estão mais totalmente corretos ou completos.

Às vezes é necessário executar algum código que varia de acordo com a plataforma. Este capítulo explora as técnicas.

Pré-processamento no Projeto de Ativo Compartilhado

Um Xamarin.Forms projeto de ativo compartilhado pode executar código diferente para cada plataforma usando as diretivas #ifde pré-processador C# , #elife endif. Isso é demonstrado no PlatInfoSap1:

Captura de tela tripla do parágrafo formatado em variável

No entanto, o código resultante pode ser feio e difícil de ler.

Classes paralelas no projeto de ativo compartilhado

Uma abordagem mais estruturada para executar código específico da plataforma no SAP é demonstrada no exemplo PlatInfoSap2 . Cada um dos projetos de plataforma contém uma classe e métodos de nome idêntico, mas implementados para essa plataforma específica. Em seguida, o SAP simplesmente instancia a classe e chama o método.

DependencyService e a Biblioteca de Classes Portátil

Observação

As bibliotecas de classes portáteis foram substituídas por bibliotecas do .NET Standard. Todo o código de exemplo do livro foi convertido para usar bibliotecas padrão do .NET.

Uma biblioteca normalmente não pode acessar classes em projetos de aplicativo. Essa restrição parece impedir que a técnica mostrada no PlatInfoSap2 seja usada em uma biblioteca. No entanto, Xamarin.Forms contém uma classe chamada DependencyService que usa a reflexão .NET para acessar classes públicas no projeto de aplicativo da biblioteca.

A biblioteca deve definir um interface com os membros que precisa usar em cada plataforma. Em seguida, cada uma das plataformas contém uma implementação dessa interface. A classe que implementa a interface deve ser identificada com um DependencyAttribute no nível do assembly.

Em seguida, a biblioteca usa o método genérico Get de DependencyService para obter uma instância da classe de plataforma que implementa a interface.

Isso é demonstrado no exemplo DisplayPlatformInfo.

Geração de som específica da plataforma

A amostra MonkeyTapWithSound adiciona bipes ao programa MonkeyTap acessando recursos de geração de som em cada plataforma.