Xamarin Forms -  Acessando APIs de plataforma específica


 Neste artigo veremos como acessar recursos específicos de cada plataforma no Xamarin Forms.

Para poder criar aplicações para o mundo real você vai precisar acessar recursos específicos de cada plataforma como sistema de arquivos, sensores, câmera, rede, notificações, etc.

Cada sistema operacional gerencia esses recursos usando API nativas que não podem ser compartilhadas entre as plataformas, e , desse modo, o Xamarin Forms não pode mapear esses objetos entre as plataformas.

Então como podemos acessar APIs nativas no Xamarin Forms ? Seria isso possível ?

Felizmente o Xamarin Forms oferece várias maneiras de acessar APIs específicas de cada plataforma que você pode usar para acessar praticamente tudo de cada plataforma.  Assim, não há limite para o que você pode fazer com Xamarin.Forms.

Para acessar os recursos da plataforma, você precisará escrever código C# código em cada projeto de cada plataforma.

A classe Device e o método OnPlatform

O namespace Xamarin.Forms expõe uma classe importante chamada Device que permite detectar a plataforma na qual o seu aplicativo está sendo executado e o idioma do dispositivo (tablet, telefone, área de trabalho).

Esta classe é particularmente útil quando você precisa ajustar a interface do usuário com base na plataforma.

O código a seguir demonstra como aproveitar a propriedade Device.RuntimePlatform para detectar a plataforma em execução e para alterar a interface com UI
baseadas no valor obtido.

Vamos criar um projeto Xamarin Forms chamado XF_Device do tipo PCL e definir no arquivo MainPage o código XAML e o código C# conforme abaixo:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XF_Device"
             x:Class="XF_Device.MainPage">
    <ContentPage.Content>
        <StackLayout>
            <Label x:Name="Label1" Text="BemVindo Xamarin Forms"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

 

public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            switch (Device.RuntimePlatform)
            {
                case Device.iOS:
                    Label1.FontSize = Device.GetNamedSize(NamedSize.Large, Label1);
                    break;
                case Device.Android:
                    Label1.FontSize = Device.GetNamedSize(NamedSize.Medium, Label1);
                    break;
                case Device.WinPhone:
                    Label1.FontSize = Device.GetNamedSize(NamedSize.Medium, Label1);
                    break;
                case Device.UWP:
                    Label1.FontSize = Device.GetNamedSize(NamedSize.Large, Label1);
                    break;
            }
        }
    }
MainPage.xaml MainPage.xaml.cs

O método RuntimePlatform é de tipo string e pode ser facilmente comparado com constantes específicas chamadas iOS, Android, WinPhone e UWP que representam as plataformas suportadas.

Nota: As enumerações Device.OS e TargetPlatform agora estão obsoletas e devem ser substituidas por RunTimePlatform.

O método GetNamedSize resolve automaticamente o tamanho da fonte Default, Micro, Small Medium e Large e retorna o valor double correspondente, o qual evita a necessidade de fornecer valores numéricos que seriam diferentes para cada plataforma.

Usando a propriedade Device.Idiom você pode determinar se o dispositivo atual em que o aplicativo está sendo executado é um telefone, tablet ou PC desktop (somente UWP) e retorna um dos valores da enumeração TargetIdiom.

Abaixo temos o exemplo de código :

public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            switch (Device.RuntimePlatform)
            ...

            switch (Device.Idiom)
            {
                case TargetIdiom.Desktop:
                    // UWP desktop
                    break;
                case TargetIdiom.Phone:
                    // Fones
                    break;
                case TargetIdiom.Tablet:
                    // Tablets
                    break;
                case TargetIdiom.Unsupported:
                    // dispositivos não suportados
                    break;
            }
        }
    }
MainPage.xaml.cs

Podemos também decidir como ajustar elementos da interface do usuário com base na plataforma e idioma no código XAML. No exemplo abaixo estamos ajustando a propriedade Padding da página com base na platataforma.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XF_Device"
             x:Class="XF_Device.MainPage">
        <StackLayout>
            <StackLayout.Padding>
                <OnPlatform x:TypeArguments="Thickness">
                    <On Platform="Android" Value="0, 0, 0, 0"/>
                    <On Platform="WinPhone" Value="0, 0, 0, 0"/>
                    <On Platform="iOS" Value="0, 20, 0, 0"/>
                </OnPlatform>

            </StackLayout.Padding>
        </StackLayout>
        <StackLayout>
            <Label x:Name="Label1" Text="BemVindo Xamarin Forms"
                VerticalOptions="CenterAndExpand"
                HorizontalOptions="CenterAndExpand" />
        </StackLayout>
</ContentPage>
MainPage.xaml

Usando a tag OnPlatform, você pode especificar um valor de propriedade diferente com base no iOS, Android e WinPhone. O valor da propriedade depende do atributo x:TypeArguments que representa o tipo .NET para a propriedade, Thickness (Espessura) neste caso particular.

Da mesma forma, você também pode trabalhar com OnIdiom e a enumeração TargetIdiom no XAML.

E estamos conversados...

"Disse-lhe Jesus: Eu sou o caminho, e a verdade e a vida; ninguém vem ao Pai, senão por mim"
João 14:6

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti