در اندروید ، شما می توانید از رابط کاربری SmsManager و یا از نرم افزار SMS application برای ارسال اس ام اس استفاده کنید. در این بخش آموزش این دو روش پایه برای ارسال sms (پیامک) را همراه با مثال توضیح خواهیم داد.

استفاده از SMS Manager برای ارسال SMS

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("phoneNo", null, "sms message", null, null);

برنامه ی پیش فرض مدیریت پیام ها (Built-in SMS application)

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", "default content"); 
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);

البته برای هر دو حالت لازم است مانند قطعه کد زیر با استفاده از “SEND_SMS permission” مجوز ارسال پیامک را دریافت کنیم.

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

به غیر از متدهای فوق، متد های مهم دیگری نیز در کلاس SmsManager وجود دارند که در جدول زیر لیست شده اند.

شماره متد و توضیحات
1 ArrayList<String> divideMessage(String text)

این متد پیام های طولانی را به چندین پیام کوتاه تر تقسیم می کند که طول هر کدام از آن ها کمتر از حداکثر اندازه ی مجاز که معمولا ۱۶۰ کارکتر است می باشد.

2 ()static SmsManager getDefault

این متد یک نمونه پیش فرض از شی SmsManager ایجاد می کند.

3 void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent)

این متد برای ارسال داده ها از طریق SMS به پورت یک اپلیکیشن خاص استفاده می شود.

4 void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents)

برای ارسال پیام های چند رسانه ای با استفاده از SMS استفاده می شود.

5 void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)

برای ارسال پیام های متنی با استفاده از SMS استفاده می شود.

مثال

این مثال نحوه ی استفاده از شی SmsManager را به منظور ارسال یک پیامک به شماره ی تعیین شده نشان می دهد. برای این منظور مراحل جدول زیر را دنبال کنید.

توجه:برای آزمایش با این مثال به یک دستگاه موبایل مجهز به آخرین ورژن Android OS نیاز خواهید داشت، در غیر این صورت مجبور خواهید بود با امولاتوری کار کنید که ممکن است به درستی کار نکند و نتیجه ی اشتباهی را به شما نشان دهد.

مرحله توضیحات
1 با استفاده ار اندروید استودیو یک پروژه ی جدید با نام SmsManager تحت بسته ی com.example.smsmanager ایجاد کنید.
2 فایل src/MainActivity.java را تغییر دهید و کد لازم برای ارسال sms اضافه کنید.
3 لِی اوت فایل XML مربوط به res/layout/activity_main.xml را تغییر داده و اگر لازم است مولفه ی GUI را به آن اضافه کنید. برای گرفتن شماره موبایل و متن SMS ارسالی یک GUI ساده و یک دکمه برای ارسال SMS اضافه کنید.
4 res/values/strings.xml را تغییر دهید تا مقادیر ثابت لازم را تعریف کنید.
5 AndroidManifest.xml را به شکلی که در زیر می بینید تغییر دهید.
6 برنامه را اجرا کنید تا نتیجه را در امولاتور Android ببینید و نتیجه ی تغییرات انجام شده روی برنامه را بررسی کنید.

در زیر محتوای تغییر یافته ی فایل اکتیویتی اصلی را مشاهده می کنید .

src/com.example.tutorialspoint/MainActivity.java:

package com.example.tutorialspoint;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.app.Activity;

import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.telephony.SmsManager;

import android.util.Log;
import android.view.Menu;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

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) {
            sendSMSMessage();
         }
      });
   }
  
   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;
            }
         }
      }

   }
}

کد زیر محتوای فایل res/layout/activity_main.xml خواهد بود :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="MainActivity">

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Sending SMS Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:hint="Enter Phone Number"
      android:phoneNumber="true"
      android:textColorHint="@color/abc_primary_text_material_dark"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />

   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_below="@+id/editText"
      android:layout_alignLeft="@+id/editText"
      android:layout_alignStart="@+id/editText"
      android:textColorHint="@color/abc_primary_text_material_dark"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton"
      android:hint="Enter SMS" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Send Sms"
      android:id="@+id/btnSendSMS"
      android:layout_below="@+id/editText2"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="48dp" />

</RelativeLayout>

کد زیر محتوای فایل res/values/strings.xml برای تعریف دو ثابت جدید می باشد :

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">tutorialspoint</string>
</resources>

در زیر محتوای پیش فرض AndroidManifest.xml را مشاهده می کنید :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint" >
  
   <uses-permission android:name="android.permission.SEND_SMS" />
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

اجازه بدهید برنامه ی clicksite را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Android studio ، یکی ازفایل های اکتیویتی پروژه را باز کرده و روی آیکن RunEclipse Run Icon از نوار ابزار کلیک کنید. قبل از شروع برنامه ی شما، Android studio پنجره ای به شما نشان خواهد داد که در دو فیلد جداگانه شماره ی مورد نظر برای ارسال اس ام اس و در دیگری متن ارسالی را می خواهد.

اکنون می توانید شماره موبایل دلخواه خود را انتخاب کرده و یک پیام متنی به آن شماره ارسال کنید. در انتها برای ارسال پیام خود روی دکمه ی Send SMS کلیک کنید. مطمئن شوید که اتصال GSM شما خوب کار می کند تا پیامتان به گیرنده تحویل داده شود.

شما می توانید بیش از یک گیرنده SMS را که توسط علامت کاما مجزا شده اند را بگیرید و سپس مجبور خواهید بود در برنامه ی خود آن ها را به یک array string تجزیه کنید و در انتها می توانید از یک حلقه (loop) استفاده کنید تا پیام خود را به تمام شماره های داده شده ارسال کنید.

بخش بعدی به شما نشان خواهد داد که چگونه از SMS client  برای ارسال SMS استفاده کنید.

استفاده از Built-in Intent برای ارسال

شما می توانید از Android Intent برای ارسال SMS با فراخوانی تابع SMS داخلی اندروید استفاده کنید. بخش بعدی قسمت های مختلف Intent object لازم برای ارسال SMS را توضیح می دهد.

آموزش ارسال پیامک SMS در اندروید به همراه نمونه کد

 برای ارسال SMS با استفاده از اندروید دو مسیر پیش روی شماست :

  • استفاده از SMS Manager برای ارسال پیام (SmsManager API)
  • استفاده از Intent داخلی برای ارسال SMS

استفاده از SMS Manager برای ارسال SMS

SMS Manager عملکرد های Sms  را از قبیل ارسال داده به دستگاه ارائه شده، کنترل می کند.

شما می توانید این آبجکت را از طریق فراخوانی روش استاتیک ()SmsManager.getDefault  ایجاد کنید، مانند زیر :

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("phoneNo", null, "sms message", null, null);

Built-in SMS application

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", "default content"); 
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);

البته هر دو راه پیشنهادی برای ارسال اس ام اس به  SEND_SMS نیاز دارند.

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

به جز روش های فوق ، چند تابع مهم دیگر در کلاس SmsManager وجود دارند که فهرستی از آنها را در زیر میبینید :

(ArrayList <String> divideMessage(String text

این متد یک متن پیام را به چندین بخش تقسیم می کند، هیچ کدام بزرگتر از اندازه ی بزرگترین پیام متنی نیستند.

()static SmsManager getDefault

این متد برای به دست آوردن نمونه ی پیش فرض SmsManager  استفاده می شود.

void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) :

این متد برای ارسال پایگاه داده ی SMS  به پورت یک برنامه ی مشخص ، استفاده می شود.

void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) :

یک متن چند بخشی را ارسال می کند.

void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) :

یک متن SMS را ارسال می کند.

مثال:

این مثال به طور عملی به شما نشان می دهد چگونه با استفاده از آبجکت SmsManager یک sms به شماره موبایل تعیین شده ارسال کنید.

برای آزمایش با این مثال به یک دستگاه موبایل مجهز به آخرین ورژن Android OS نیاز خواهید داشت، در غیر این صورت مجبور خواهید بود با امولاتوری کار کنید که ممکن است به درستی کار نکند و نتیجه ی اشتباهی را به شما نشان دهد.

  •  برای ایجاد یک اپلیکیشن  اندروید از Android Studio IDE استفاده نموده و آن را با عنوان  clicksite تحت پکیج com.example.clicksite  ایجاد کنید .
  •  فایل src/MainActivity.java را تغییر دهید و کد لازم برای  ارسال sms اضافه کنید
  • لِی اوت فایل XML مربوط به res/layout/activity_main.xml را تغییر داده و اگر لازم است مولفه ی GUI را به آن اضافه کنید. برای گرفتن شماره موبایل و متن SMS ارسالی یک GUI ساده و یک دکمه برای ارسال SMS اضافه کنید.
  •  res/values/strings.xml را تغییر دهید تا مقادیر ثابت لازم را تعریف کنید.
  •  AndroidManifest.xml را به شکلی که در زیر می بینید تغییر دهید.
  •  برنامه را اجرا کنید تا نتیجه را در  امولاتور Android ببینید و نتیجه ی تغییرات انجام شده روی برنامه را بررسی کنید.

در زیر محتوای تغییر یافته ی فایل اکتیویتی اصلی را مشاهده می کنید :

package com.example.tutorialspoint;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.app.Activity;

import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.telephony.SmsManager;

import android.util.Log;
import android.view.Menu;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

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) {
            sendSMSMessage();
         }
      });
   }
  
   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;
            }
         }
      }

   }
}

کد زیر محتوای فایل res/layout/activity_main.xml  خواهد بود :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="MainActivity">

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Sending SMS Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:hint="Enter Phone Number"
      android:phoneNumber="true"
      android:textColorHint="@color/abc_primary_text_material_dark"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />

   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_below="@+id/editText"
      android:layout_alignLeft="@+id/editText"
      android:layout_alignStart="@+id/editText"
      android:textColorHint="@color/abc_primary_text_material_dark"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton"
      android:hint="Enter SMS" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Send Sms"
      android:id="@+id/btnSendSMS"
      android:layout_below="@+id/editText2"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="48dp" />

</RelativeLayout>

کد زیر محتوای فایل res/values/strings.xml  برای تعریف دو ثابت جدید می باشد :

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">clicksite</string>
</resources>

در زیر محتوای پیش فرض AndroidManifest.xml را مشاهده می کنید :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint" >
  
   <uses-permission android:name="android.permission.SEND_SMS" />
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

اجازه بدهید برنامه ی clicksite را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Android studio ، یکی ازفایل های اکتیویتی پروژه را باز کرده و روی آیکن Run  از نوار ابزار  کلیک کنید. قبل از شروع برنامه ی شما، Android studio پنجره ای به شما نشان خواهد داد که در دو فیلد جداگانه شماره ی مورد نظر برای ارسال اس ام اس و در دیگری متن ارسالی را می خواهد.

اکنون می توانید شماره موبایل دلخواه خود را انتخاب کرده و یک پیام متنی به آن شماره ارسال کنید. در انتها برای ارسال پیام خود روی دکمه ی Send SMS کلیک کنید. مطمئن شوید که اتصال GSM شما خوب کار می کند تا پیامتان به گیرنده تحویل داده شود.

شما می توانید بیش از یک گیرنده SMS را که توسط علامت کاما مجزا شده اند را بگیرید و سپس مجبور خواهید بود در برنامه ی خود آنها را به یک array string تجزیه کنید و در انتها می توانید از یک حلقه (loop) استفاده کنید تا پیام خود را به تمام شماره های داده شده ارسال کنید.

بخش بعدی به شما نشان خواهد داد که چگونه از SMS client  برای ارسال SMS استفاده کنید.

استفاده از Built-in Intent برای ارسال SMS  :

شما می توانید از Android Intent برای ارسال SMS با فراخوانی تابع SMS داخلی اندروید استفاده کنید. بخش بعدی قسمت های مختلف Intent object لازم برای ارسال SMS را توضیح می دهد.

فعالیت Intent Object برای ارسال SMS

شما از اکشن ACTION_VIEW برای آغاز یک SMS client نصب شده روی دستگاه اندروید خود استفاده خواهید کرد. در زیر ترکیب ساده ی ایجاد یک Intent را با اکشن ACTION_VIEW مشاهده می کنید

Intent smsIntent = new Intent(Intent.ACTION_VIEW);

شی Data/Type – Intent جهت ارسال پیامک

به منظور ارسال پیامک لازم است با استفاده از متد ()setData رشته ی “:smsto” را به عنوان URI و با استفاده از متد ()setType نوع داده را “vnd.android-dir/mms-sms” تعیین کنیم. مانند قطعه کد زیر:

smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");

شی Intent – داده های اضافی (Extra) جهت ارسال پیامک

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

smsIntent.putExtra("address"  , new String("0123456789;3393993300"));
smsIntent.putExtra("sms_body"  , "Test SMS to Angilla");

توجه : در این جا ، آدرس و بدنه ی sms دقیق بوده و فقط باید با کاراکتر های کوچک نوشته شوند. شما می توانید بیشتر از یک شماره را در رشته مشخص کنید و آنها را با علامت (;) مجزا کنید.

مثال

این مثال نحوه ی استفاده از شی Intent جهت ارسال پیامک با استفاده از برنامه پیش فرض سیستم را نشان می دهد. برای این منظور مراحل جدول زیر را دنبال کنید.

توجه:برای اجرای این مثال به یک دستگاه موبایل مجهز شده به آخرین ورژن Android OS نیاز خواهید داشت، در غیر این صورت مجبور به استفاده از امولاتوری خواهید شد که ممکن است به خوبی کار نکند و نتیجه درست را به شما منعکس ننماید .

مرحله توضیحات
1 با استفاده ار اندروید استودیو یک پروژه ی جدید با نام built-in SMS تحت بسته ی com.example.built_in.sms ایجاد کنید.
2 فایل src/MainActivity.java را تغییر دهید و کد لازم برای ارسال sms را اضافه کنید.
3 محتوای فایل XML مربوط به res/layout/activity_main.xml را تغییر دهید و اگر لازم است مولفه ی GUI به آن اضافه کنید. من در حال افزودن یک دکمه ی ساده برای آغار SMS Client می باشم.
4 res/values/strings.xml را برای تعریف مقادیر ثابت لازم تغییر دهید.
5 همان طور که نشان داده شده AndroidManifest.xml را تغییر دهید .
6 برنامه را اجرا کنید تا امولاتور اندروید آغاز شود و نتیجه ی تغییرات انجام شده در برنامه را بررسی کنید.

محتوای تغییر یافته فایل اکتیویتی اصلی src/com.example.clicksite/MainActivity.java :

package com.example.tutorialspoint;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      Button startBtn = (Button) findViewById(R.id.button);
      startBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            sendSMS();
         }
      });
   }
   
   protected void sendSMS() {
      Log.i("Send SMS", "");
      Intent smsIntent = new Intent(Intent.ACTION_VIEW);
      
      smsIntent.setData(Uri.parse("smsto:"));
      smsIntent.setType("vnd.android-dir/mms-sms");
      smsIntent.putExtra("address"  , new String ("01234"));
      smsIntent.putExtra("sms_body"  , "Test ");
      
      try {
         startActivity(smsIntent);
         finish();
         Log.i("Finished sending SMS...", "");
      } catch (android.content.ActivityNotFoundException ex) {
         Toast.makeText(MainActivity.this, 
         "SMS faild, please try again later.", Toast.LENGTH_SHORT).show();
      }
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }
}

در ادامه محتوای فایل res/layout/activity_main.xml خواهد بود :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Drag and Drop Example"
      android:id="@+id/textView"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials Point "
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:textSize="30dp"
      android:textColor="#ff14be3c" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_marginTop="48dp"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Compose SMS"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_alignRight="@+id/textView2"
      android:layout_alignEnd="@+id/textView2"
      android:layout_marginTop="54dp"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView" />
      
</RelativeLayout>

در ادامه محتوای res/values/strings.xml برای تعریف دو ثابت جدید خواهد بود :

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">tutorialspoint</string>
</resources>

محتوای پیش فرض فایل AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint" >
      
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

اجازه بدهید برنامه ی SendSMSDemo شما را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن RunEclipse Run Icon از تولبار کلیک کنید. قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب گزینه محل اجرای برنامه اندرویدتان، نمایش خواهد داد.

موبایل خود را به عنوان یک گزینه انتخاب کنید و سپس آن را چک کنید که صفحه ی زیر را نمایش خواهد داد.

حالا با استفاده از Compose SMS به built-in SMS clients متصل خواهید شد. که در تصویر زیر مشخص است:

شما می توانید فیلدهای پیش فرض را تغییر دهید و برای ارسال اس ام اس هم کافیست که روی دکمه Send کلیک کنید.