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 em 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 com nomes idênticos, 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.
Normalmente, uma biblioteca não pode acessar classes em projetos de aplicativos. Essa restrição parece impedir que a técnica mostrada em PlatInfoSap2 seja usada em uma biblioteca. No entanto, Xamarin.Forms contém uma classe chamada DependencyService
que usa a reflexão do .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
O exemplo MonkeyTapWithSound adiciona bipes ao programa MonkeyTap acessando recursos de geração de som em cada plataforma.