Friday 1 June 2012

Sample application for SMS

Here is two ways to sending SMS ,
  One is, you can invoke the built-in SMS application of your Device, for that

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);

Second is you can create your own code:
Permissions: add below permissions in android manifest.xml
  <uses-permission android:name="android.permission.SEND_SMS">
  </uses-permission>
  <uses-permission android:name="android.permission.RECEIVE_SMS">
  </uses-permission>
 
sms.xml: 
<?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"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Enter the phone number of recipient"
        />   
    <EditText
        android:id="@+id/txtPhoneNo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"      
        />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"       
        android:text="Message"
        />   
    <EditText
        android:id="@+id/txtMessage"
        android:layout_width="fill_parent"
        android:layout_height="150px"
        android:gravity="top"       
        />        
    <Button
        android:id="@+id/btnSendSMS"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Send SMS"
        />  
</LinearLayout>
 
Here is Sms.java class:
 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);
  
 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();
        }
    });        
  }

   private void sendSMS(String phoneNumber, String message)

     {        
  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); 

    }
To send Sms , we used the smsmanager class, Unlike other classes you don't
directly instantiate this class, instead you can call getDefault() static method
to obtain smsmanager class object. The SendTextMessage() method sends
the sms message with a PendingIntent.
The above code uses a PendingIntent object (sentPI) to monitor the sending
process. When an SMS message is sent, the first BroadcastReceiver's onReceive
 event will fire. This is where you check the status of the sending process.
The second PendingIntent object (deliveredPI) monitors the delivery process.
The second BroadcastReceiver's onReceive event will fire when an SMS is
successfully delivered.
Here is the ScreenShot:

 


 

No comments:

Post a Comment