01Location
- /data/data/com.android.providers.telephony/databases/mmssms.db
- /data/user/<userId>/com.android.providers.telephony/databases/mmssms.db
- /data/data/com.android.providers.telephony/app_parts/ (MMS part files; some layouts use …/parts/)
02Questions it answers
- Which numbers or addresses exchanged SMS/MMS with the device, and when?
- Was a message received, sent, drafted, queued or failed?
- Had the message been read or seen on the device?
- Which attachments belonged to an MMS, and are the part files still present?
03Format and versions
| Format | SQLite database created by the AOSP TelephonyProvider (MmsSmsDatabaseHelper, DATABASE_NAME "mmssms.db"). SMS rows live in the sms table; MMS headers in pdu, addresses in addr and body parts in part, with part._data pointing to a file on disk. Threads are tracked in threads and canonical_addresses. |
|---|---|
| Applies to | AOSP Telephony provider; the public column constants are documented from API level 19. Vendor builds add variants: ALEAPP handles a Samsung spam_sms table and LG extended sms.type values whose labels are not vendor-documented. |
04Key fields
| Field | What it tells you |
|---|---|
| sms.address | The address of the other party (TEXT). |
| sms.type | Message box: 1 inbox, 2 sent, 3 draft, 4 outbox, 5 failed, 6 queued (0 = all). |
| sms.read / sms.seen | read: has the message been read; seen: whether the user has seen it, which drives notification display. |
| sms.thread_id | Conversation (thread) the message belongs to; shared with MMS rows. |
| sms.status | TP-Status for sent messages: -1 none, 0 complete, 32 pending, 64 failed. |
| pdu.msg_box | MMS box: 1 inbox, 2 sent, 3 drafts, 4 outbox, 5 failed (0 = all). |
| addr.type | MMS address role used by ALEAPP: 0x89 From, 0x97 To, 0x82 Cc, 0x81 Bcc; joined on addr.msg_id = pdu._id. |
| part.ct / part._data | Content type of each MMS part and the recorded path of its file. |
05Timestamps
| Field | Encoding | Note |
|---|---|---|
| sms.date | Unix epoch, milliseconds | Documented as the date the message was received. |
| sms.date_sent | Unix epoch, milliseconds | Documented as the date the message was sent; compare with date before building a sequence. |
| pdu.date / pdu.date_sent | Unix epoch, seconds | MMS dates are in seconds; the provider's own union query multiplies pdu.date by 1000 to align it with SMS. |
Decode raw values with the Timestamp decoder and convert local wall-clock times with the Local time to UTC.
06Examination workflow
- Preserve mmssms.db together with any -wal/-journal companion files and the app_parts (or parts) folder.
- Record the schema: check for vendor tables (e.g. spam_sms) and columns before applying type labels.
- Normalise SMS milliseconds and MMS seconds to UTC, then merge both transports on thread_id.
- Resolve MMS senders and recipients through addr, and match part._data to files by full recorded path, not file name alone.
- Correlate addresses with the contacts and call-log databases.
07Interpretation pitfalls
- LG extended type values 7, 8 and 19 have no vendor documentation; report unknown codes as stored.
- In WAL mode recent changes may exist only in the -wal file until a checkpoint; reading the main file alone can miss or misstate records.
- SQLite leaves deleted content in the file unless secure_delete is on or VACUUM runs; recovered fragments must be validated against the schema.
- An MMS with several parts produces several rows when joined to part; count messages by pdu._id.
09Sources
- Telephony.TextBasedSmsColumns — API reference Android Developers · checked 2026-10-14
- Telephony.BaseMmsColumns — API reference Android Developers · checked 2026-10-14
- AOSP — MmsSmsDatabaseHelper.java Android Open Source Project (GitHub mirror) · checked 2026-10-14
- AOSP — MmsSmsProvider.java Android Open Source Project (GitHub mirror) · checked 2026-10-14
- ALEAPP — scripts/artifacts/smsmms.py Alexis Brignoni et al. (GitHub) · checked 2026-10-14
- SQLite — Write-Ahead Logging SQLite · checked 2026-10-14
- SQLite — PRAGMA statements (secure_delete) SQLite · checked 2026-10-14