0

I want to send SMS with more 160 characters, but I only have a problem with the multipart...

//---sends a SMS message to another device---
public void sendSMS(String phoneNumber, String message, final String Id)
{      

    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();
                    getServerData("http://site.com","id",Id);

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


  /*
                 Don't work
  SmsManager sms = SmsManager.getDefault();
  ArrayList<String> parts = sms.divideMessage(message);
  sms.sendMultipartTextMessage(phoneNumber, null, parts, null, null);
  */


  /* WORK FINE, BUT 160 chars limited */

  SmsManager sms = SmsManager.getDefault();
  sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);  

}
rekire
  • 47,260
  • 30
  • 167
  • 264
Shuty
  • 87
  • 1
  • 4
  • 9
  • Hey I think I wrote your twice: please obmit the tags in the title and remember to accept answers. – rekire Jan 24 '13 at 15:19
  • Take a look at these questions: http://stackoverflow.com/questions/1981430/sending-long-sms-messages http://stackoverflow.com/questions/4306020/android-receiving-long-sms-multipart And here in Android coockbook: http://androidcookbook.com/Recipe.seam;jsessionid=4B89EE37727BFF894F628909DBBEB0BB?recipeId=2686 – Victor Ronin Jan 24 '13 at 15:21

2 Answers2

1
SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(message);
sms.sendMultipartTextMessage(phoneNumber, null, parts, null, null);

sendMultipartTextMessage will send as many messages as it needs until all parts have been sent.

David Buzatu
  • 624
  • 8
  • 18
dreamdeveloper
  • 1,266
  • 1
  • 15
  • 20
0
 ArrayList<String> parts = (ArrayList<String>) splitInChunks(smsText, 120);
   for (String str : parts) {
        smsManager.sendTextMessage(phoneNumber, null, str, null, null);
  }


  /* Split message in chunks */
  public static List<String> splitInChunks(String id, int chunkSize) {
  ArrayList<String> result = new ArrayList<String>();
  int length = id.length();
  for (int i = 0, j = 1; i < length; j++, i += chunkSize) {
     result.add(SMSPRETAG + j + "," + id.substring(i, Math.min(length, i + chunkSize)));
  }
  return result;

}

If you want to make more robust , you can add some unique ID to each chunk.

Jambaaz
  • 2,788
  • 1
  • 19
  • 30