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 #if
de pré-processador C# , #elif
e endif
. Isso é demonstrado no PlatInfoSap1:
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.