The "SMS problem" on Android currently is that you can send and receive MMS messages, but there is no interface to save what you receive to the sd card. This is a very laughable oversight by the dev team for version 1. Something that I can't believe is still a problem months after launch.
I fully expected the Android Market community to solve this problem eventually. However there was one main obstacle in their way.
If you looked at the Android API reference you won't see any mention of MMS messages. Even if you search for MMS you find 4 results, none of which show you in code how to access them. SMS is a little better it. There is at least code to send SMS messages. But the whole thing is limited in scope.
However, applications such as MyBackup and Txtract are able to access text messages. In the case of MyBackup it is also able to backup MMS messages. It's a good program. They both are. And when I looked at them I was amazed to see that while they were able to get "underneath" the API and access data the API never intended neither of them thought to solve the "SMS Problem". MyBackup gets close. It saves the attachments but doesn't do it in a way that allows the phone to then access it easily.
So I decided I was going to tackle the "SMS Problem".
My first thought was the the SmsManager class had some hidden functionality that was missing from the API. No such luck.
I poked around the Android Source for a while. This yielded a ton of information, none of it distinct on how to solve the problem. I happened upon a post somewhere online which gave code that used a ContentResolver to query a http://code.google.com/android/reference/android/net/Uri.html, to return a Cursor object that could then be used to access the messages. Ah ha!
Wait a minute what does all that mean?
URI stands for Uniform Resource Identifier (Go read that first link I dare ya). They are strings in a certain format that define a resource. A URLs, that address at the top of web browsers are a class of URIs.
A Cursor is the object used to access data (like that stored in a database) which is organized in columns and rows.
And a ContentResolver is a "class (that) provides applications access to the content model."
In short. You make a database query, using a string to find the data that isn't talked about anywhere in the android reference.
How that's done is talked about here.
So armed with this knowledge, the "special" URI, I was able to create "Save MMS". And solve the "SMS Problem" I estimate at least 2 months ahead of cupcake being pushed out to T-Mobile customers.
Is this good or bad? I'm not really sure. There was no documentation for what I was doing. I had to drudge through it and even when I thought I had something working some users are still encountering problems. I'm assuming this is due to different phone sending MMS with different metadata. I simply did not have enough information to write clean enough code for this.