Xamarin Forms - Enviando SMS com Xamarin Essentials


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

A 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 ao destinatários.

Para ter acesso a essa classe vamos usar a biblioteca Xamarin Essentials. Se você não conhesse essa biblioteca 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 e clique em New Project e a seguir escolha Cross Platform -> Mobile App (Xamarin.Forms) e informe o nome XF_SMS1:

A seguir selecione a Plataforma, eu marquei somente Android, e escolha a estratégia de compartilhamento que será .NET Standard.

Clique no botão OK.

Pronto nosso projeto já esta criado. ( Atualmente(11/2018) a versão mais atual estável é a 3.4.0.1)

No menu Tools, clique em Nuget Package Manager e a seguir 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 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 inclui 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:

<?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:

Obs:  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 aqui : XF_SMS1.zip  (sem as referências)

"Porque Deus não nos destinou para a ira, mas para a aquisição da salvação, por nosso Senhor Jesus Cristo."

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