Mobile

22 mar, 2019

Xamarin Forms – Enviando SMS com Xamarin Essentials

Publicidade

Neste artigo vou mostrar como podemos enviar SMS em uma aplicação Xamarin Forms usando a biblioteca Xamarin Essentials.

Para enviar SMS em aplicações Xamarin Forms podemos usar a classe SMS, que permite abrir um aplicativo de SMS padrão com uma determinada mensagem e enviar aos destinatários.

Para ter acesso a essa classe vamos usar a biblioteca Xamarin Essentials. Se você não conhece essa biblioteca, recomendo que leia o meu artigo “Introdução ao Xamarin Essentials“.

Vamos lá!

Recursos usados:

Criando o projeto e instalando as dependências

Abra o VS 2017 Community, clique em “New Project“, e a seguir escolha Cross Platform > Mobile App (Xamarin.Forms) e informe o nome XF_SMS1:

Em seguida, selecione a plataforma (eu marquei somente Android) e escolha a estratégia de compartilhamento, que será .NET Standard.

Clique no botão OK, e pronto, nosso projeto já está criado.

No menu Tools, clique em Nuget Package Manager e depois em Manage Nuget Packages for Solution.

Digite “Xamarin.Essentials” para localizar o pacote e a seguir marque o pacote e instale-o em todos os projetos:

Pronto, agora que já temos todos os recursos necessários nos projetos, falta fazer alguns ajustes no projeto Android.

Ajustes a serem feitos na plataforma Android

Lembrando que a biblioteca Xamarin.Essentials suporta a versão mínima 4.4 do Android, e que a versão do Android para compilação deve ser 8.1 – API Level 27.

No momento em que esse artigo foi escrito, os ajustes necessários na plataforma Android eram os seguintes:

Nota: orientação obtida em: https://docs.microsoft.com/pt-br/xamarin/essentials/geolocation?tabs=android.

No arquivo MainActivity.cs inclua a seguinte instrução:

  • Xamarin.Essentials.Platform.Init(this, savedInstanceState);

A seguir, inclua também o método abaixo neste arquivo:

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

Na pasta Resources/drawable do projeto Android eu incluí a imagem maco.jpg usada no projeto:

Definindo o código da MainPage

Agora abra o arquivo MainPage.xaml e inclua as seguintes views usando um layout StackLayout:

  • 1 Image – maco.jpg
  • 1 Label – Text= SMS
  • 2 Entry – txtNumero e txtMensagem
  • 1 Button – x:Name = btnEnviaSms
<?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_SMS1"
             x:Class="XF_SMS1.MainPage">
    <StackLayout>
        <StackLayout HorizontalOptions="Center" VerticalOptions="Start">
            <Image Margin="0,50,0,0" x:Name="imgBanner" Source="maco.jpg" ></Image>
            <Label Margin="0,0,0,10" FontAttributes="Bold" FontSize="Large" TextColor="#CA6F1E" 
HorizontalTextAlignment="Center" Text="SMS"></Label>
            <Entry x:Name="txtNumero" Placeholder="Informe o número"></Entry>
            <Entry x:Name="txtMensagem" Placeholder="Informe a mensagem..."></Entry>
            <Button x:Name="btnEnviaSms" Text="Enviar SMS" Clicked="btnEnviaSms_Clicked"/>
        </StackLayout>
    </StackLayout>
</ContentPage>

Agora abra o arquivo MainPage.xaml.cs e defina o código para o evento do botão de comando e a definição do método para enviar o SMS:

using System;
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;
namespace XF_SMS1
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
        private async void btnEnviaSms_Clicked(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtNumero.Text))
            {
                await EnviaSms(txtMensagem.Text, txtNumero.Text);
            }
        }
        public async Task EnviaSms(string texto, string recipiente)
        {
            try
            {
                var mensagem = new SmsMessage(texto, recipiente);
                await Sms.ComposeAsync(mensagem);
            }
            catch (FeatureNotSupportedException ex)
            {
                await DisplayAlert("Falhou !!!", "O envio de Sms não é suportado neste dispositivo." + ex.Message, "OK");
            }
            catch (Exception ex)
            {
                await DisplayAlert("Falhou !!!", ex.Message, "OK");
            }
        }
    }
}

O envio do SMS funciona chamando o método ComposeAsync de uma SmsMessage que contém o destinatário da mensagem e o corpo da mensagem, sendo ambos opcionais.

Executando o projeto e informando o número do destinatário e o texto da mensagem iremos obter o resultado conforme mostram as figuras abaixo:

Observação: para efetivamente enviar um SMS, a aplicação deve ser compilada para um dispositivo físico. Em um emulador o processo em geral não funciona.

Pegue o código do projeto compartilhado e o arquivo MainActivity no link abaixo: