My HTC Desire is getting sluggish under the weight of all those smses I’ve sent and received. I’d like to back them up and delete them from the phone.
The easiest thing (and, actually, the thing I most want to do) is just take a copy of the sms database. However:
* you can’t just copy the database which holds these things because … well for some reason they’ve decided to lock owners out of their own phone (if the phone is rooted then this can be done);
* all of the SMS back up utilities I’ve looked at have something wrong with them – they seem mainly to be designed to backup and restore to a given device, not store an archive of the smses;
* the Desire itself comes with a backup utility … which apparently encrypts the backup file so you can’t read it, but even still it’s no good to me because apparently Telstra removed it before selling me the phone. FFS
It seems like I need to write my own backup utility to replicate the sms data.
edit (16:15): Apparently reading all sms with scripting layer for Android takes about 6 lines of code. Now I just need to find a way to query the contacts to match up the names to the numbers.
edit (16:40): basic code is this (after another 30 mins or so, including updating to sl4a etc):
import cPickle as pickle
droid = android.Android()
print “Getting messages”
messages = droid.smsGetMessages(False,’inbox’).result
print “Trying droid.queryContent”
contacts = droid.queryContent(my_uri,None,None,None,None).result
f = open(fn,’w')
fn = “msgs.pickle”
f = open(fn,’w')
But there’s apparently a bug in my version which returns integers rather than actual email addresses etc
All up, including time refamiliarising myself with adb, installing sl4a and python for android this took about 90 minutes. I would have spent at least this amount of time trawling through useless apps on (the, now, particularly awful) Google Play. Once I marry up these data sets and verify them a little I will delete my SMSs and get on with things.
Of course, after all that I find (by serendipity) that someone has already done it.
Google is increasingly becoming useless as a search engine
Update (next day)
HTC Desire seems unable to delete an entire thread or at least one with thousands of SMSs. I suspect that it is something to do with the suspend timing. Since its not finishing the whole deletion, none of the SMSs get deleted.
Anyway, I am doing that manually as well – it is quite slow – deleting 100 took 300ish seconds – 3 seconds each! Java would presumably be faster? The rate per delete goes down with the number of messages in the database (to about 1 second per delete). Presumably this release of Android does something dumb like compacts the database after each delete?
So, 24 hours later and I am 5000 ish SMSs lighter.