The SMS protocol has no way to report when messages have been read, but it does have ways to report when it's sent and received. Unfortunately, the standard makes these optional, not required.
The Android framework supports receipts when SMS messages are sent and received. The SmsMananager lets a program specify independent callbacks for sentIntent
"when the message is successfully sent, or failed" and deliveryIntent
"when the message is delivered to the recipient". See: developer.android.com/reference/android/telephony/SmsManager.html
But you can't rely on that working in an Android app. The problem is that
- The actual SMS transfer code is written by the device manufacturer
- SMS message transfer is controlled by the carrier
So, for a delivery receipt to work, it has to be implemented, and implemented consistently, by
- The manufacturer of your phone
- Your carrier
- Your friend's carrier
- The manufacturer of your friend's phone
The bottom line is that you're not even guaranteed that a given SMS is going to be delivered, let alone when. If you want receipts you need to use a different app, such as facebook chat.