ارسال و دریافت SMS در اندروید

ارسال و دریافت SMS در اندروید

 

اولین کاری  که برا ی نوشتن کد مربوط به ارسال sms باید انجام داد اضافه کردن permission مربوطه به فایل AndroidManifest.xml است.

: کدهای زیر را رای ارسال و دریافت اس ام اس اضافه میکنیم

<uses-permission android:name=”android.permission.SEND_SMS” />

<uses-permission android:name=”android.permission.RECEIVE_SMS” />

در اکتیویتی مربوطه دو  EditText  برا ی گرفتن شماره تلفن و پیغامی که میخوهید ارسال کنید و همچنین دکمه‌ای برای ارسال ایجاد می‌کنیم. مانند شکل زیر:

و کدهای زیر به اکتیویتی اضافه می‌کنیم.

public class MainActivity extends Activity {

   private static final int MY_PERMISSIONS_REQUEST_SEND_SMS =0 ;

   Button sendBtn;

   EditText txtphoneNo;

   EditText txtMessage;

   String phoneNo;

   String message;

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      sendBtn = (Button) findViewById(R.id.btnSendSMS);

      txtphoneNo = (EditText) findViewById(R.id.editText);

      txtMessage = (EditText) findViewById(R.id.editText2);

      sendBtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            phoneNo = txtphoneNo.getText().toString();

            message = txtMessage.getText().toString();

            smsManager.sendTextMessage(phoneNo, null, message, null, null);

         }

      });

   }

البته این کد که نوشتیم ساده‌ترین شکل ارسال اس ام اس‌ه.

راه درست‌تر و حرفه‌ای‌تر اینه که اول تو برنامه چک کنیم ببینیم آیا دسترسی مورد نظر وجود داره یا نه .اگه بود که اس ام اس ارسال بشه و گرنه از کاربر مجوزشو بگیره بعد اس ام اس را ارسال کنه. که کدش به شکل زیر نوشته میشه.

protected void sendSMSMessage() {

      phoneNo = txtphoneNo.getText().toString();

      message = txtMessage.getText().toString();

      if (ContextCompat.checkSelfPermission(this,

         Manifest.permission.SEND_SMS)

         != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(this,

               Manifest.permission.SEND_SMS)) {

            } else {

               ActivityCompat.requestPermissions(this,

                  new String[]{Manifest.permission.SEND_SMS},

                  MY_PERMISSIONS_REQUEST_SEND_SMS);

            }

      }

   }

 

   @Override

   public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {

      switch (requestCode) {

         case MY_PERMISSIONS_REQUEST_SEND_SMS: {

            if (grantResults.length > 0

               && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                  SmsManager smsManager = SmsManager.getDefault();

                  smsManager.sendTextMessage(phoneNo, null, message, null, null);

                  Toast.makeText(getApplicationContext(), “SMS sent.”,

                     Toast.LENGTH_LONG).show();

            } else {

               Toast.makeText(getApplicationContext(),

                  “SMS faild, please try again.”, Toast.LENGTH_LONG).show();

               return;

            }

         }

      }

   }

}

 

این متد (sendSMSMessage()) را تو اون قسمتی که ما کد ارسال اس ام اس رو نوشتیم فراخوانی می‌کنیم.

 

خوب میرسیم به دریافت اس ام اس. این بخش کمی داستانش فرق میکنه. اول باید با یه مفهومی به نام Broadcast آشنا بشیم.

BroadcastReceiver در حقیقت سرویس و یا امکانیست که شما آنرا مامور می‌کنید در صورت بروز یک رخداد یک عکس‌العملی نشان دهد.می‌تونید برای درک بهتر با استراق سمع مقایسه کنید.یعنی منتظر میشینه به محض اینکه یک اتفاق خاص مد‌نظرما افتاد یک کاری انجام دهد.

BroadcastReceiver هم یه همچین حالتیه.مثلا شما تعریف می‌کنید که اگر مثلا گوشی شما در معرض امواج وای‌فای قرار گرفت از شما سوال کنه که می‌خواهید به آن متصل بشید یا نه؟کل موضوع همینه.حالا می‌خواهیم با BroadcastReceiver یه برنامه بنویسیم به محض اینکه یک پیغام به گوشی آمد پیام بده.حال سوالی که پیش می‌آید اینه که آیا لازمه برنامه ما برای اینکه پیام را دریافت کند باید همیشه در حال اجرا باشد.نه نیاز نیست .فقط کافیه یکبار برنامه نصب بشه و یکبار اجرا بشه.حالا اگر برنامه را ببندید BroadcastReceiver در حفظه گوشی آماده باشه.اینکه شما چه برخوردی با دریافت پیام بکنید به خودتان بستگی دارد.مثلا می‌تونید تعریف کنید که اگر یک اس‌ام‌اس از یک شماره خاص اومد آلارم اخطار بده و یا نمایش نده و یا هر کار دیگه‌ای.

خوب میریم سراغ کد مربوط به اینکار:

یه کلاس جدید با نام دلخواه خودتون ایجاد می‌کنید.ما اینجا اسمشو میذاریم Receiver.

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver  {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(G.context,”SMS RECEIVE”,Toast.LENGTH_LONG).show();
}
}

ابتدا باید این کلاس را در فایل AndroidManifest.xml تعریف کنیم و کدهای زیر را به تگ  application اضافه کنیم.

<receiver android:name=”.Receiver” >
<intent-filter >
<action android:name=”android.provider.Telephony.SMS_RECEIVED”></action>
</intent-filter>
</receiver>

 

برنامه ما به محض دریافت اس ام اس یک پیغام نمایش میده. این دیگه بستگی به شما داره که چه کدی برای این قسمت بنویسید. خوب این کد فقط به شما اطلاع میده که یک پیغام دریافت کردید و اینکه محتویات پیغام چیه رو به شما نمیگه.برای دریافت محتویات پیام باید مراحل زیر را طی کنید.

خوب داخل همون کلاس Receiver که ساخته بودیم کدهای زیر را قرار می‌دهیم.

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver  {

@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();

     if (bundle!=null){
Object[] objects=(Object[]) bundle.get(“”);
for(int i=0 ; i < objects.length;i++){
SmsMessage message= SmsMessage.createFromPdu((byte[])objects[i]);
String num=message.getDisplayOriginatingAddress();
String mess=message.getDisplayMessageBody();
Toast.makeText(G.context,”  “+num+” “+mess,Toast.LENGTH_LONG).show();
}
}

}

 

 

 

 

0 پاسخ

دیدگاه خود را ثبت کنید

آیا می خواهید به بحث بپیوندید؟
در صورت تمایل از راهنمایی رایگان ما استفاده کنید!!

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *