Neste artigo veremos como implementar o envio de SMS em suas aplicações Xamarin.Forms.
ADICIONANDO O NUGET PACKAGE
Clique com o botão direito em cima de sua Solution e selecione “Manage NuGet Packages for Solution…”.
Digite “Xam.Plugins.Messaging” e selecione o plugin como demonstrado na imagem a seguir.
Selecione todos os projetos e clique no botão “Install”.
Xaml
Crie um Entry para o usuário informar o número de telefone do destinatário, outro para escrever a mensagem desejada e um Button para chamar o método Send.
<?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:DemoSMS" | |
x:Class="DemoSMS.MainPage"> | |
<StackLayout VerticalOptions="StartAndExpand"> | |
<Label Text="Number:"/> | |
<Entry x:Name="Number" Keyboard="Telephone"/> | |
<Label Text="Message:"/> | |
<Entry x:Name="Message" /> | |
<Button Text="SEND" Clicked="Send"/> | |
</StackLayout> | |
</ContentPage> |
C#
Referencie o plugin Messaging e crie um “CrossMessaging.Current.SmsMessenger”, utilize os métodos CanSendSms para verificar se o dispositivo suporta enviar SMS e SendSms para realizar o envio.
using System; | |
using Plugin.Messaging; | |
using Xamarin.Forms; | |
namespace DemoSMS | |
{ | |
public partial class MainPage : ContentPage | |
{ | |
public MainPage() | |
{ | |
InitializeComponent(); | |
} | |
private void Send(object sender, EventArgs e) | |
{ | |
var smsMessenger = CrossMessaging.Current.SmsMessenger; | |
if (smsMessenger.CanSendSms) | |
smsMessenger.SendSms(Number.Text, Message.Text); | |
} | |
} | |
} |
Android
Edite o arquivo AndroidManifest.xml e adicione o provider e meta-data como demonstrado a seguir.
<?xml version="1.0" encoding="utf-8"?> | |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.DemoSMS" android:installLocation="auto"> | |
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="27" /> | |
<application android:label="DemoSMS.Android"> | |
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.companyname.DemoSMS.fileprovider" android:exported="false" android:grantUriPermissions="true"> | |
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data> | |
</provider> | |
</application> | |
</manifest> |
Observação: Lembre-se de substituir o texto “com.companyname.DemoSMS” pelo nome do pacote da sua aplicação.
Dentro da pasta “Resources” crie uma pasta chamada xml e adicione um arquivo chamado file_paths.xml, como demonstrado a seguir.
<?xml version="1.0" encoding="utf-8"?> | |
<paths xmlns:android="http://schemas.android.com/apk/res/android"> | |
<external-path name="external_files" path="." /> | |
</paths> |
Envio em Background (Android)
Por padrão o plugin abre o aplicativo responsável por enviar SMS já com as informações preenchidas, se você deseja que o plugin já realize o envio automaticamente é necessário:
1 – Adicione as seguintes permissões no AndroidManifest
- READ_PHONE_STATE
- SEND_SMS
2 – Utilize os métodos CanSendSmsInBackground para verificar se o dispositivo suporta enviar SMS em Background e SendSmsInBackground para realizar o envio.
private void Send(object sender, EventArgs e) | |
{ | |
var smsMessenger = CrossMessaging.Current.SmsMessenger; | |
if (smsMessenger.CanSendSmsInBackground) | |
smsMessenger.SendSmsInBackground(Number.Text, Message.Text); | |
} |
Resultado
Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.
Meus parabéns pelo trabalho árduo e continuo. Preciso saber como receber e ler uma SMS usando o Xamarin.Forms?
CurtirCurtir
Obrigado Martinho,
Essa opção até onde eu sei é possível apenas na plataforma Android.
Dê uma olhada nesse link, pode te ajudar. http://developersupdates.blogspot.com/2015/10/broadcast-receivers-in-android-xamarin.html
CurtirCurtir