Introdução

Uma das tarefas mais realizadas a partir de smartphones é o envio de mensagens de texto (SMS). Muitos preferem enviar um SMS a ligar diretamente para o destinatário, pois com o texto consegue passar toda informação de uma única vez, dispensando cumprimentos e despedidas desnecessários.

Atualmente, muitas empresas também aderiram a este método para passar informações para seus clientes de forma mais prática. Um exemplo disso é observado em algumas operadoras de cartão de crédito, que notificam o usuário quando uma compra é efetuada com seu cartão.Então, sabendo dessa realidade e da importância que possuem as mensagens de texto, nada melhor que integrá-las às nossas aplicações, permitindo ao usuário enviar SMS para um determinado número sem precisar sair da aplicação (ou “minimizá-la”) e acessar o aplicativo de mensagens.

No Windows Phone, essa é uma tarefa consideravelmente simples e pode ser realizada com o auxílio da classe SmsComposeTask, contida no namespace Microsoft.Phone.Tasks.

Essa classe possui basicamente duas propriedades e um método que são relevantes para nós neste momento:

  • Body (string): como o nome sugere, esta propriedade representa o corpo da mensagem. Podemos, por exemplo, solicitar que o usuário digite ou definir um texto fixo via código.
  • To (string): esta propriedade representa o número ou nome para o qual o SMS será enviado. É importante que aqui seja informado um número válido ou o nome de um contato, exatamente como ele aparece na agenda. Podem ser informados vários destinatários, separados por ponto e vírgula, assim como ocorre no aplicativo de mensagens (que será aberto, no fim das contas).
  • Show(): o único método que nos interessa aqui, responsável por abrir o aplicativo de mensagens com os destinatários e o corpo da mensagem já definidos. O usuário precisa somente tocar no botão Enviar.

Mãos à obra

Já conhecemos a classe que iremos utilizar, então já podemos criar uma nova aplicação para Windows Phone no Visual Studio, utilizando o template Windows Phone App.

Na página principal (MainPage.xaml), vamos inserir um botão no grid principal, para enviar o SMS. O conteúdo dessa página deve ficar como mostrado na Listagem 1.

Listagem 1. Conteúdo da página MainPage.xaml

            <phone:PhoneApplicationPage 
            x:Class="PhoneApp1.MainPage"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
            xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
            FontFamily="{StaticResource PhoneFontFamilyNormal}"
            FontSize="{StaticResource PhoneFontSizeNormal}"
            Foreground="{StaticResource PhoneForegroundBrush}"
            SupportedOrientations="Portrait" Orientation="Portrait"
            shell:SystemTray.IsVisible="True">
        
        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
        
            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock x:Name="ApplicationTitle" Text="DevMedia" Style="{StaticResource PhoneTextNormalStyle}"/>
                <TextBlock x:Name="PageTitle" Text="Enviar SMS" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
            </StackPanel>
        
            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <StackPanel>
                    <Button x:Name="btnEnviar" Content="Enviar SMS" Click="btnEnviar_Click"></Button>
                </StackPanel>
            </Grid>
        </Grid>
         
        </phone:PhoneApplicationPage>
        

A interface da página deve fica como ilustrada na Figura 1.

Interface da aplicação

Figura 1: Interface da aplicação

Para codificar o event handler do evento Click do botão Enviar, podemos dar dois clique sobre ele na interface, ou clicar com o botão direito na tag Button e utilizar a opção Navigate to Event Handler, como mostra a Figura 2.

Navegando para o event handler do botão

Figura 2: Navegando para o event handler do botão

Isso nos levará ao código C#, na função btnEnviar_Click, que trata o evento Click do botão.

Lá instanciaremos a classe SmsComposeTask, preenchendo as propriedade Body e To e invocando o método Show, conforme vemos na Listagem 2.

Listagem 2. Evento Click do botão Enviar

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Net;
            using System.Windows;
            using System.Windows.Controls;
            using System.Windows.Documents;
            using System.Windows.Input;
            using System.Windows.Media;
            using System.Windows.Media.Animation;
            using System.Windows.Shapes;
            using Microsoft.Phone.Controls;
            using Microsoft.Phone.UserData;
            using Microsoft.Phone.Tasks;
            
            namespace PhoneApp1
            {
                public partial class MainPage : PhoneApplicationPage
                {
                    // Constructor
                    public MainPage()
                    {
                        InitializeComponent();
                    }
            
                    private void btnEnviar_Click(object sender, RoutedEventArgs e)
                    {
                        SmsComposeTask sms = new SmsComposeTask();
                        sms.To = "Andrew Hill; 88997755";
                        sms.Body = "Este é o corpo da mensagem";
                        sms.Show();
                    }
                }
            }
        

É importante observar que na seção de usings adicionamos o namespace Microsoft.Phone.Tasks, onde está contida a classe SmsComposeTask, como já foi citado anteriormente.

Executando a aplicação e tocando no botão, teremos o seguinte resultado:

Navegando para o event handler do botão

Figura 3: Aplicativo de mensagens aberto pela aplicação

Agora basta pressionar o botão “enviar” (send) para que a mensagem seja enviada. Ao fazer isso no emulador, obteremos um erro, pois não há uma conta de telefonia válida para realizar tal serviço.

Para resolver isso, é só executar a aplicação em um aparelho com uma conta válida.

Como vimos, basicamente fizemos uso da classe SmsComposeTask, que abre o aplicativo de mensagens para permitir ao usuário enviar SMS.

Então finalizamos aqui este breve artigo. Quaisquer dúvidas, sugestões ou críticas podem ser registradas na seção de comentários, abaixo.