Can i automatically send SMS (Without the user need to approve)

Yes, you can send sms without making user interaction...But it works, when user wants to send sms only to a single number.

try {    
    SmsManager.getDefault().sendTextMessage(RecipientNumber, null,    
    "Hello SMS!", null, null);    
} catch (Exception e) {    
    AlertDialog.Builder alertDialogBuilder = new    
    AlertDialog.Builder(this);    
    AlertDialog dialog = alertDialogBuilder.create();    
    dialog.setMessage(e.getMessage());    
    dialog.show();    
}    

Also, add manifest permission....

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

You can use this method to send an sms. If the sms is greater than 160 character then sendMultipartTextMessage is used.

private void sendSms(String phonenumber,String message, boolean isBinary)
{
    SmsManager manager = SmsManager.getDefault();

    PendingIntent piSend = PendingIntent.getBroadcast(this, 0, new Intent(SMS_SENT), 0);
    PendingIntent piDelivered = PendingIntent.getBroadcast(this, 0, new Intent(SMS_DELIVERED), 0);

    if(isBinary)
    {
            byte[] data = new byte[message.length()];

            for(int index=0; index<message.length() && index < MAX_SMS_MESSAGE_LENGTH; ++index)
            {
                    data[index] = (byte)message.charAt(index);
            }

            manager.sendDataMessage(phonenumber, null, (short) SMS_PORT, data,piSend, piDelivered);
    }
    else
    {
            int length = message.length();

            if(length > MAX_SMS_MESSAGE_LENGTH)
            {
                    ArrayList<String> messagelist = manager.divideMessage(message);

                    manager.sendMultipartTextMessage(phonenumber, null, messagelist, null, null);
            }
            else
            {
                    manager.sendTextMessage(phonenumber, null, message, piSend, piDelivered);
            }
    }
}

Update

piSend and piDelivered are Pending Intent They can trigger a broadcast when the method finish sending an SMS

Here is sample code for broadcast receiver

    private BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String message = null;

            switch (getResultCode()) {
            case Activity.RESULT_OK:
                message = "Message sent!";
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                message = "Error. Message not sent.";
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                message = "Error: No service.";
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                message = "Error: Null PDU.";
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                message = "Error: Radio off.";
                break;
            }

            AppMsg.makeText(SendMessagesWindow.this, message,
                    AppMsg.STYLE_CONFIRM).setLayoutGravity(Gravity.BOTTOM)
                    .show();
      }
  };

and you can register it using below line in your Activity

registerReceiver(receiver, new IntentFilter(SMS_SENT));  // SMS_SENT is a constant

Also don't forget to unregister broadcast in onDestroy

@Override
protected void onDestroy() {
    unregisterReceiver(receiver);
    super.onDestroy();
}

If your application has in the AndroidManifest.xml the following permission

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

you can send as many SMS as you want with

SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(...);

and that is all.


Yes, you can send SMS using the SmsManager. Please keep in mind that your application will need the SEND_SMS permission for this to work.