ارسال Sms در Xamarin

یکشنبه 25 بهمن 1394

در این مقاله می خواهیم پیامی را به شماره مورد نظر خود ارسال نماییم ، قبلا این مقاله را با زبان جاوا نوشته ایم که بتوانیم یک پیام ارسال نماییم ، در این مقاله زمانی که کاربر پیام را ارسال کرد یک پیغام Toast به منظور ارسال پیام و یا ارسال نشدن پیام نمایش داده می شود.

ارسال Sms در Xamarin

ابتدا یک پروژه ی جدید ایجاد نمایید داخل پوشه ی Layout یک فایل Xaml ایجاد نمایید به صورت زیر و از دو PlainText و یک دکمه استفاده نمایید.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/etnum" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/etbody" />
    <Button
        android:text="ارسال پیام"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnsend" />
</LinearLayout>

داخل کلاس Activity باید کد های زیر را قرار دهید:

داخل متد Oncreate ابتدا ابزار های لازم را تعریف نمایید و برای دکمه ی مورد نظر باید رویداد تعریف شود که با زدن دکمه پیام ارسال شود.

یک متد به نام Smssentreciver تعریف نمایید که از کلاس  Broadcastreciver ارث بری می نماید که از دستور switch استفاده می شود اگر پیام ارسال شد یک پیغام toast نمایش می دهد و برای حالت های مختلف ارسال نشدن پیام دردسترس نبودن سرویس و ... پیغام خود را نمایش می دهد.

یک متد دیگر هم نوشته شده است که از کلاس Broadcastreciver ارث بری شده است که زمانی که پیام به دست مخاطب خودتان می رسد با استفاده از دستور switch یک پیغام toast به کاربر نمایش داده خواهد شد.

کل کد به صورت زیر خواهد بود:

using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Telephony;

namespace sendsms
{
    [Activity(Label = "sendsms", MainLauncher = true, Icon = "@drawable/icon")]
    public class Activity1 : Activity
    {
        private SmsManager _smsManager;
        private BroadcastReceiver _smsSentBroadcastReceiver, _smsDeliveredBroadcastReceiver;
      

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            var sendSMSButton = FindViewById<Button>(Resource.Id.btnsend);
            var phoneNumberEditText = FindViewById<EditText>(Resource.Id.etnum);
            var messageEditText = FindViewById<EditText>(Resource.Id.etbody);
            _smsManager = SmsManager.Default;

            sendSMSButton.Click += (s, e) =>
            {
                var phone = phoneNumberEditText.Text;
                var message = messageEditText.Text;

                var piSent = PendingIntent.GetBroadcast(this, 0, new Intent("SMS_SENT"), 0);
                var piDelivered = PendingIntent.GetBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);

                _smsManager.SendTextMessage(phone, null, message, piSent, piDelivered);
            };
        }

        protected override void OnResume()
        {
            base.OnResume();

            _smsSentBroadcastReceiver = new SMSSentReceiver();
            _smsDeliveredBroadcastReceiver = new SMSDeliveredReceiver();

            RegisterReceiver(_smsSentBroadcastReceiver, new IntentFilter("SMS_SENT"));
            RegisterReceiver(_smsDeliveredBroadcastReceiver, new IntentFilter("SMS_DELIVERED"));
        }

        protected override void OnPause()
        {
            base.OnPause();

            UnregisterReceiver(_smsSentBroadcastReceiver);
            UnregisterReceiver(_smsDeliveredBroadcastReceiver);
        }
    }

    [BroadcastReceiver(Exported = true, Permission = "//receiver/@android:android.permission.SEND_SMS")]
    public class SMSSentReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            switch ((int)ResultCode)
            {
                case (int)Result.Ok:
                    Toast.MakeText(Application.Context, "پیام ارسال شد", ToastLength.Short).Show();
                    break;
                case (int)SmsResultError.GenericFailure:
                    Toast.MakeText(Application.Context, "پیام ارسال نشد", ToastLength.Short).Show();
                    break;
                case (int)SmsResultError.NoService:
                    Toast.MakeText(Application.Context, "سرویس در دسترس نیست", ToastLength.Short).Show();
                    break;
                case (int)SmsResultError.NullPdu:
                    Toast.MakeText(Application.Context, "Null PDU", ToastLength.Short).Show();
                    break;
                case (int)SmsResultError.RadioOff:
                    Toast.MakeText(Application.Context, "Radio Off", ToastLength.Short).Show();
                    break;
            }
        }
    }

    [BroadcastReceiver(Exported = true, Permission = "//receiver/@android:android.permission.SEND_SMS")]
    public class SMSDeliveredReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            switch ((int)ResultCode)
            {
                case (int)Result.Ok:
                    Toast.MakeText(Application.Context, "پیام ارسال شد", ToastLength.Short).Show();
                    break;
                case (int)Result.Canceled:
                    Toast.MakeText(Application.Context, "پیام ارسال نشد", ToastLength.Short).Show();
                    break;
            }
        }
    }
}

در قسمت تنظیمات در androidmanifest باید مجوز دسترسی ارسال sms یعنی SEND_SMS را فعال نمایید

خروجی به صورت زیر خواهد بود به عنوان مثال اگر خط شما آنتن ندهد پیغام No service نمایش داده می شود.

دوره های آموزشی زامارین 

دوره برنامه نویسی اندروید با سی شارپ ( Xamarin )

آموزش متریال دیزاین در زامارین

آموزش Xamarin Forms

دوره Xamarin Form پیشرفته

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید