Monday 23 July 2012

Android Send and Receive Sms


Hello Friends ,
Today ,I am sharing a sample application in which we can send and received
the sms.

1. SmsActivity.java



package com.app;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.telephony.gsm.SmsMessage;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SmsActivity extends  Activity 
{
 Button btnSendSMS;
 EditText txtPhoneNo;
 EditText txtMessage;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        
        btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
        txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo);
        txtMessage = (EditText) findViewById(R.id.txtMessage);
        
        /*
        Intent sendIntent = new Intent(Intent.ACTION_VIEW);
        sendIntent.putExtra("sms_body", "Content of the SMS goes here..."); 
        sendIntent.setType("vnd.android-dir/mms-sms");
        startActivity(sendIntent);
        */
                
        btnSendSMS.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View v) 
            {             
             String phoneNo = txtPhoneNo.getText().toString();
             String message = txtMessage.getText().toString();              
                if (phoneNo.length()>0 && message.length()>0)                
                    sendSMS(phoneNo, message);                
                else
                 Toast.makeText(getBaseContext(), 
                        "Please enter both phone number and message.", 
                        Toast.LENGTH_SHORT).show();
            }
        });        
    }
    
    //---sends a SMS message to another device---
    private void sendSMS(String phoneNumber, String message)
    {      
     /*
        PendingIntent pi = PendingIntent.getActivity(this, 0,
                new Intent(this, test.class), 0);                
            SmsManager sms = SmsManager.getDefault();
            sms.sendTextMessage(phoneNumber, null, message, pi, null);        
        */
     
     String SENT = "SMS_SENT";
     String DELIVERED = "SMS_DELIVERED";
     
        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
            new Intent(SENT), 0);
        
        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
            new Intent(DELIVERED), 0);
     
        //---when the SMS has been sent---
        registerReceiver(new BroadcastReceiver(){
   @Override
   public void onReceive(Context arg0, Intent arg1) {
    switch (getResultCode())
    {
        case Activity.RESULT_OK:
         Toast.makeText(getBaseContext(), "SMS sent", 
           Toast.LENGTH_SHORT).show();
         break;
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
         Toast.makeText(getBaseContext(), "Generic failure", 
           Toast.LENGTH_SHORT).show();
         break;
        case SmsManager.RESULT_ERROR_NO_SERVICE:
         Toast.makeText(getBaseContext(), "No service", 
           Toast.LENGTH_SHORT).show();
         break;
        case SmsManager.RESULT_ERROR_NULL_PDU:
         Toast.makeText(getBaseContext(), "Null PDU", 
           Toast.LENGTH_SHORT).show();
         break;
        case SmsManager.RESULT_ERROR_RADIO_OFF:
         Toast.makeText(getBaseContext(), "Radio off", 
           Toast.LENGTH_SHORT).show();
         break;
    }
   }
        }, new IntentFilter(SENT));
        
        //---when the SMS has been delivered---
        registerReceiver(new BroadcastReceiver(){
   @Override
   public void onReceive(Context arg0, Intent arg1) {
    switch (getResultCode())
    {
        case Activity.RESULT_OK:
         Toast.makeText(getBaseContext(), "SMS delivered", 
           Toast.LENGTH_SHORT).show();
         break;
        case Activity.RESULT_CANCELED:
         Toast.makeText(getBaseContext(), "SMS not delivered", 
           Toast.LENGTH_SHORT).show();
         break;         
    }
   }
        }, new IntentFilter(DELIVERED));        
     
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);               
    }    
}

2.SmsReceiver.Java



package com.app;



import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.telephony.gsm.SmsMessage;

import android.widget.Toast;



public class SmsReceiver extends BroadcastReceiver

{

 @Override

 public void onReceive(Context context, Intent intent)

 {

        //---get the SMS message passed in---

        Bundle bundle = intent.getExtras();       

        SmsMessage[] msgs = null;

        String str = "";           

        if (bundle != null)

        {

            //---retrieve the SMS message received---

            Object[] pdus = (Object[]) bundle.get("pdus");

            msgs = new SmsMessage[pdus.length];           

            for (int i=0; i<msgs.length; i++){

                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);               

                str += "SMS from " + msgs[i].getOriginatingAddress();                    

                str += " :";

                str += msgs[i].getMessageBody().toString();

                str += "\n";       

            }

            //---display the new SMS message---

            Toast.makeText(context, str, Toast.LENGTH_SHORT).show();

        }                   

 }

}


Download The Source Code:
Sms.zip



Mukesh Kumar

Hi Guys I am from Delhi working as Web/Mobile Application Developer(Android Developer), also have knowledge of Roboelctric and Mockito ,android test driven development... Blogging has been my passion and I think blogging is one of the powerful medium to share knowledge and ideas....

5 comments:

  1. ʜeү I know thiѕ iss off topic but I was ѡondering if you knew of any widgets I сoulɗ аdd to my
    blog that automatіcallу tweet my newest tweitter updates.
    I've been looking for a plug-in like this for qujite some time and was hoping mаybe you would have some exρerience with something
    like this. Please let me know if you run into anything.
    I truly enjoy rrеading your bloǥ and I loоk forward to your
    ոeew updates.

    Also viѕit my blog post: acai berry 900

    ReplyDelete
  2. ʟink excҺange iss nothing еlse however it is just placing the other person's website linκ oon your page aat proper рlace and other persoո will
    also Ԁo same for you.

    Also viѕit myy blog ρost: acai berry 900

    ReplyDelete
  3. Hello Mukesh,

    The receiving sms part is not working..How to do that.??

    ReplyDelete
  4. The receiving sms example is not included?

    ReplyDelete

 

Copyright @ 2013 Android Developers Blog.