PendingIntents are given to other apps/processes as a way for them to send a message back to your own app as if it were your own.
SmsManager will handle the two PIs that you give it and do this: First, when SmsManager can confirm that the SMS was put into the network ("sent") it will broadcast your "SMS_SENT" pending intent so that you can update your SMS database that the message has gone out.
Second, once the network notifies SmsManager that the SMS was delivered (if the network supports this feature and there is a cost on some networks for this feature), then SmsManager will send your "SMS_DELIVERED" PI to your app so you can notify the user/update the SMS database.
You should have an option for the user to enable/disable DELIVERY notification because of the costs.
Also, it's these lines that create the PendingIntents:
sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
But it doesn't matter what they are called. It's this line that identifies one as "sent" and the other "delivered":
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
another way of writing it:
sms.sendTextMessage(phoneNumber, null, message, SMS_SENT_CONFIRMATION, SMS_DELIVER_CONFIRMATION);
SmsManager stores whatever you put in SMS_SENT_CONFIRMATION until the message is sent. And the same with SMS_DELIVER_CONFIRMATION - create the intent, put whatever you want in it and then it will send it back to your app. You might put a message ID, for example, to track your confirmations.