آموزش ارسال پیام در Xamarin
در این مقاله می خواهیم پیامی را به شماره مورد نظر خود ارسال نماییم ، در این مقاله زمانی که کاربر پیام را ارسال کرد یک پیغام Toast به منظور ارسال پیام و یا ارسال نشدن پیام نمایش داده می شود.
ابتدا یک پروژه ی جدید ایجاد نمایید داخل پوشه ی 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 نمایش داده می شود.