Partilhar via


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 em PlatInfoSap1:

Captura de tela tripla do parágrafo formatado 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 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.