Compartir a través de


Resumen del capítulo 9. Llamadas de API específicas de la plataforma

Nota:

Este libro se publicó en la primavera de 2016 y no se ha actualizado desde entonces. Gran parte del libro sigue siendo útil, pero algunos de los materiales están anticuados y algunos temas ya no son completamente correctos o completos.

A veces es necesario ejecutar código que varíe según la plataforma. En este capítulo se exploran las técnicas.

Preprocesamiento en el proyecto de recursos compartidos

Un proyecto de recurso compartido de Xamarin.Forms puede ejecutar código diferente para cada plataforma mediante las directivas de preprocesador de C# #if, #elif y endif. Esto se muestra en PlatInfoSap1:

Captura de pantalla triple de un párrafo con formato variable

Sin embargo, el código resultante puede ser feo y difícil de leer.

Clases paralelas en el proyecto de recursos compartidos

En el ejemplo PlatInfoSap2 se muestra un enfoque más estructurado para ejecutar código específico de la plataforma en SAP. Cada uno de los proyectos de la plataforma contiene una clase y métodos con nombres idénticos, pero implementados para esa plataforma en particular. A continuación, SAP simplemente crea instancias de la clase y llama al método.

DependencyService y la biblioteca de clases portable

Nota:

Las bibliotecas de clases portables se han sustituido por las bibliotecas .NET Standard. Todo el código de ejemplo del libro se ha convertido para usar las bibliotecas .NET estándar.

Normalmente, una biblioteca no puede tener acceso a las clases de los proyectos de aplicación. Esta restricción parece evitar que la técnica que se muestra en PlatInfoSap2 se use en una biblioteca. Aun así, Xamarin.Forms contiene una clase denominada DependencyService que usa la reflexión de .NET para acceder a las clases públicas del proyecto de aplicación desde la biblioteca.

La biblioteca debe definir un elemento interface con los miembros que necesita usar en cada plataforma. Después, cada una de las plataformas contiene una implementación de esa interfaz. La clase que implementa la interfaz debe identificarse con un elemento DependencyAttribute en el nivel de ensamblado.

A continuación, la biblioteca usa el método genérico Get de DependencyService para obtener una instancia de la clase de plataforma que implementa la interfaz.

Esto se muestra en el ejemplo DisplayPlatformInfo.

Generación de sonido específica de la plataforma

El ejemplo MonkeyTapWithSound agrega pitidos al programa MonkeyTap mediante el acceso a las instalaciones de generación de sonido en cada plataforma.