Listen outgoing SMS or sent box in Android

Vivek picture Vivek · Apr 27, 2011 · Viewed 29.3k times · Source

I am developing an application which will store all the incoming and outgoing sms in a text file in SD card.

I am able to listen incoming messages using broadcast receiver. I am finding it very difficult to listen to outgoing SMS.

I know to some extent that a content observer on the sent box or outbox needs to be set, but I don't know how to do it.

How can this be done?

Answer

Cristian picture Cristian · Apr 27, 2011

Basically, you have to register a content observer... something like this:

ContentResolver contentResolver = context.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms/out"),true, yourObserver);

yourObserver is an object (new YourObserver(new Handler())) that could look like this:

class YourObserver extends ContentObserver {

    public YourObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        // save the message to the SD card here
    }
}

So, how exactly do you get the content of the SMS? You must use a Cursor:

// save the message to the SD card here
Uri uriSMSURI = Uri.parse("content://sms/out");
Cursor cur = this.getContentResolver().query(uriSMSURI, null, null, null, null);
 // this will make it point to the first record, which is the last SMS sent
cur.moveToNext();
String content = cur.getString(cur.getColumnIndex("body"));
// use cur.getColumnNames() to get a list of all available columns...
// each field that compounds a SMS is represented by a column (phone number, status, etc.)
// then just save all data you want to the SDcard :)