title: Differentiating delivery reports of two separate SMS's
body: <p>In a service, when sending smses in a loop with a broadcast receiver listening for delivery reports, how to differentiate the delivery report of each sms sent?
  This is similar to :
  <a href="https://stackoverflow.com/questions/10975792/how-to-get-delivery-report-of-each-sms-sent-in-loop-android">How to get Delivery Report of each SMS sent in loop android?</a></p>
  
  <p>except that I think he's using it in an activity and I'm using it in a service where getIntent() is of no avail.</p>
  
  <p>Edit 2: posting my code</p>
  
  <pre><code>public class CheckServer extends Service
  {
    public String snumber[] = new String[10];
  
    public JSONArray array;
  
    public int onStartCommand(Intent intent,int flags, int startid)
    {
      // Do useful things.
  
    ServiceAction SA = new ServiceAction();
    SA.execute();
  
    try 
    {
        SA.get();
    } 
    catch (InterruptedException e) 
    {
        e.printStackTrace();
    } 
    catch (ExecutionException e) 
    {
        e.printStackTrace();
    }
  
  
    new startSending().execute();
  
    scheduleNextUpdate();
  
     return START_STICKY;
  }
  
  public class startSending extends AsyncTask&lt;Void,Void,Void&gt;
  {
      @Override
      protected Void doInBackground(Void... params) 
      {
          String no,message;
  
            try 
              {
                  for (int i = 0; i &lt; array.length(); i++) 
                  {
                        JSONObject row;
                        row = array.getJSONObject(i);
                        snumber[i] = row.getString("sno");
                        no = row.getString("no");
                        message = row.getString("message");
                        sendSMS(no,message,snumber[i]);
                  }
              } 
              catch (IllegalStateException e) 
              {
                  e.printStackTrace();
              } 
              catch (JSONException e) 
              {
                  e.printStackTrace();
              }
  
          return null;
      }
  }
  
  private void scheduleNextUpdate()
  {
    Intent intent = new Intent(this, this.getClass());
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  
  // The update frequency should often be user configurable.  This is not.
  
  long currentTimeMillis = System.currentTimeMillis();
  long nextUpdateTimeMillis = currentTimeMillis + 1 * DateUtils.MINUTE_IN_MILLIS;
  Time nextUpdateTime = new Time();
  nextUpdateTime.set(nextUpdateTimeMillis);
  
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC, nextUpdateTimeMillis, pendingIntent);
  }
  
  public class ServiceAction extends AsyncTask&lt;Void,Void,Void&gt;
  {
  @Override
  protected Void doInBackground(Void... arg0) 
  {
        HttpResponse response = null;
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet();
        try 
        {
          request.setURI(new URI("http://www.somesite.com/sms/getsms"));
          response = client.execute(request);
          String result = convertStreamToString(response.getEntity().getContent());
          array = new JSONArray(result);
        } 
        catch (URISyntaxException e) 
        {
          e.printStackTrace();
        } 
        catch (ClientProtocolException e) 
        {
          e.printStackTrace();
        } 
        catch (IOException e) 
        {
          e.printStackTrace();
        } 
        catch (JSONException e) 
        {
          e.printStackTrace();
        }
  
  
      return null;
  }
  }
  
  public static String convertStreamToString(InputStream inputStream) throws IOException
  {
    if (inputStream != null)
    {
        Writer writer = new StringWriter();
  
        char[] buffer = new char[1024];
        try
        {
            Reader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"),1024);
            int n;
            while ((n = reader.read(buffer)) != -1)
            {
                writer.write(buffer, 0, n);
            }
        }
        finally
        {
            inputStream.close();
        }
        return writer.toString();
    }
    else
    {
        return "";
    }
  }
  
  
  public void sendSMS(String number,String message,String serialnum) 
  {   
    String SENT = "SMS_SENT";
  
    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
        new Intent(SENT), 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;
            }
  
            unregisterReceiver(this);
        }
    }, new IntentFilter(SENT));
  
    String DELIVERED = "SMS_DELIVERED";
  
    Intent delivered = new Intent(DELIVERED);
    delivered.putExtra("MsgNum", serialnum);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, Integer.parseInt(serialnum), delivered, 0);
  
      //---when the SMS has been delivered---
      registerReceiver(new BroadcastReceiver()
          {   
              @Override
             public void onReceive(Context context, Intent intent)
             {
                         switch (getResultCode())
                         {
                             case Activity.RESULT_OK:
  
                                 Toast.makeText(getBaseContext(), "SMS delivered",Toast.LENGTH_SHORT).show();
  
                                 updateSMSStatus USS =  new updateSMSStatus();
  
                                 USS.execute(intent.getStringExtra("Msgnum"));
  
                                 break;
  
                             case Activity.RESULT_CANCELED:
  
                                 Toast.makeText(getBaseContext(), "SMS not delivered",Toast.LENGTH_SHORT).show();
  
                                 break;                        
                         }
  
                       unregisterReceiver(this);
              }
  
          },
          new IntentFilter(DELIVERED)); 
  
      ContentValues values = new ContentValues();
      values.put("address", number);
      values.put("body", message);
      getContentResolver().insert(Uri.parse("content://sms/sent"), values);
  
      SmsManager smsMngr = SmsManager.getDefault();
      smsMngr.sendTextMessage(number, null, message, sentPI, deliveredPI);
  
  }
  
  public class updateSMSStatus extends AsyncTask&lt;String,Void,Void&gt;
  {
      @Override
      protected Void doInBackground(String... params) {
  
            HttpResponse response = null;
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet();
            try 
            {
              Log.i("SMS APP", "MyClass.getView() — Serial Number = " + params[0]);
              request.setURI(new URI("http://www.somesite.com/sms/updatesmsstatus?uname=someone&amp;sno="+params[0]));
              response = client.execute(request);
              String result = convertStreamToString(response.getEntity().getContent());
              Log.i("SMS APP","Update SMS Status is :"+result);
            } 
            catch (URISyntaxException e)
            {
              e.printStackTrace();
            } 
            catch (ClientProtocolException e) 
            {
              e.printStackTrace();
            } 
            catch (IOException e) 
            {
              e.printStackTrace();
            }
  
          return null;
      }
  }
  
    @Override
    public IBinder onBind(Intent intent) 
    {
       return null;
    }
  
  }
  </code></pre>