I'm having a problem reading the SMS messages from the device.
When acquiring a content provider for the URI content://sms/inbox
,
everything is fine. I can read the person column to find the foreign key into the people table and ultimately reach the contact and their
name.
However, I also want to traverse the sent messages too. When reading
from content://sms/sent
, the person field always appears to be 0.
Is this the correct field to be reading to locate the recipient data for the sent message? If so - any idea why mine is always 0?
All my testing has been done in the emulator and I've created 3 contacts. I've sent messages to those contacts from the emulator in the normal manner you'd send a message.
Just to reiterate, I can see the 4 sent messages and read the associated body text. My problem is that I can't seem to read the "person" ID and hence I can't work out who the recipient is.
Use the address column. I guess the person column is ignored because people can send SMSs to phone numbers that are not in the contacts list.
// address contains the phone number
Uri phoneUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, address);
if (phoneUri != null) {
Cursor phoneCursor = getContentResolver().query(phoneUri, new String[] {Phones._ID, Contacts.Phones.PERSON_ID}, null, null, null);
if (phoneCursor.moveToFirst()) {
long person = phonesCursor.getLong(1); // this is the person ID you need
}
}