Thursday, November 17, 2011

Android sending a sms

1) Add the following permissions in the AndroidManifest.xml:

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


2) Import the SMSManager library:

import android.telephony.SmsManager;


3) The simplest way to send a sms is as follows:

public static void sendSMS(String context, String phoneNumber, String message) {      
    PendingIntent pi = PendingIntent.getActivity(this, 0,
            new Intent(context, YOUR_ACTIVITY), 0);              
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, pi, null);      
}


4) To test the sending, start two emulators. The top left corner of the windows is the port number (ex. 5554). Use the port number as the phone number and try to send a message.


5) To get the status about the message after you send it, you can create the sending intent and delivery intent as the broadcastReciever.

public static void sendSMS(Context context, String phoneNumber, String message)
{
        PendingIntent sentPi = PendingIntent.getBroadcast(context, 0,
                new Intent(SENT), 0);
   
        PendingIntent deliveredPi = PendingIntent.getBroadcast(context, 0,
                new Intent(DELIVERED), 0);
   
            registerReceiver(new BroadcastReceiver(){
                @Override
                public void onReceive(Context arg0, Intent arg1) {
                    switch (getResultCode())
                    {
                        case Activity.RESULT_OK:
                            Toast.makeText(context, "SMS sent",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                            Toast.makeText(context, "Generic failure",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_NO_SERVICE:
                            Toast.makeText(context, "No service",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_NULL_PDU:
                            Toast.makeText(context, "Null PDU",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_RADIO_OFF:
                            Toast.makeText(context, "Radio off",
                                    Toast.LENGTH_SHORT).show();
                            break;
                    }
                }
            }, new IntentFilter(SENT));
   
            registerReceiver(new BroadcastReceiver(){
                @Override
                public void onReceive(Context arg0, Intent arg1) {
                    switch (getResultCode())
                    {
                        case Activity.RESULT_OK:
                            Toast.makeText(context, "SMS delivered",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case Activity.RESULT_CANCELED:
                            Toast.makeText(context, "SMS not delivered",
                                    Toast.LENGTH_SHORT).show();
                            break;                      
                    }
                }
            }, new IntentFilter(DELIVERED));
           
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPi, deliveredPi);      
}


That's it for sending a sms on Android.

No comments:

Post a Comment