彩信数据库mmssms.db

这篇博客介绍了Android中彩信数据库mmssms.db的触发器机制,包括insert_mms_pending_on_insert和delete_mms_pending_on_update,以及短信和彩信的相关表结构。重点讨论了pdu、part、addr、canonical_addresses等表的作用。同时,文章提到了MessageListAdapter和ConversationListAdapter如何监听数据变化,实现实时更新界面,展示消息的下载状态。还讨论了read和seen字段的含义及其在不同场景下的使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

trigger:

insert_mms_pending_on_insert:当pdu表中插入了一条数据,类型为130(彩信通知)或135(待发送阅读报告),说明有信息要发送,trigger会在pending_msgs表插入一条数据;

delete_mms_pending_on_update:当pdu表中有记录的msg_box从4-待发件箱改为别的值,说明有一条信息已经发出等,就从pending_msgs表中删除一条对应数据

 

短信表:sms、raw、sr_pending、attachments。

彩信表:pdu、part、addr、drm、rate。

公共表:canonical_addresses、threads、pending_msg、words。

 

  • 短信表sms

    _id

    短信id

    thread_id

    对应的会话id

    address

    对方的号码

    person

    联系人列表里的ID

    date

    接收时间

    data_sent

    发送时间

    protocol

     

    read

    用户是否看过这条信息

    0-未读;1-已读

    status

    信息状态,默认是-1

    待发送32;

    发送失败64;

    已送达0(开启了送达报告)

    type

    信箱类型id

    pdu.msg_box作用和赋值相同

    reply_path_present

     

    subject

    信息主题,一般为空

    body

    短信内容

    service_center

    服务中心即短信中心,只有gsm

    卡有,如+8613800100500

    locked

    是否锁定,默认0=不锁定

    error_code

     

    seen

    用户是否看过这条信息的通知

    0-没看过;1-看过了

     

    短信表raw

    _id

    流水号

    date

     

    reference_number

     

    count

     

    sequence

     

    destination_port

     

    address

     

    pdu

     

     

    短信表sr_pending:好像没有用到?

    reference_number

     

    action

     

    data

     

     

    短信表attachments

    sms_id

     

    content_url

     

    offset

     

     

    公共表threads

    _id

    流水号

    date

    会话中最后一条信息的日期(不包括

    草稿),也用作会话在会话列表中

    排序

    message_count

    会话中的信息数量

    recipient_ids

    多个canonical_addresses.id组成的

    串,多个id时以空格分隔

    snippet

    片段,会话中最后一条信息的内容,

    如果是彩信就是主题

    snippet_cs

    snippet的编码格式

    read

    是否有未读信息,0-有未读,1-没有

    type

     

    error

     

    has_attachment

    有无附件(不必是最后一条信息)

 

彩信表pdu:彩信主表

_id

彩信id

thread_id

对应的会话id

date

接收时间

date_sent

发送时间

msg_box

信箱类型id

sms.type作用和赋值相同

Telephony.Type

read

用户是否看过这条信息

0-未读;1-已读

m_id

 

sub

subject彩信的主题

sub_cs

subject charset

主题的字符集类型

ct_t

content type内容类型,信息中存储的

是多媒体信息还是其他,如m_type=

128/132(发、收的正文)时,值是

application/vnd.wap.multipart.related

而m_type=134(送达报告)时值为空

ct_l

content-location

在彩信中心的下载url

exp

expire过期时间,通常是从发送时间

开始后3天=24x3小时=72小时

m_cls

message class信息类别如

个人(值personnal)、广告等

X-Mms-Message-Class

m_type

信息类型,和

pending_msgs.msg.type一样

X-Mms-Message-Type

v

version这条彩信符合的规范版本

在PduHeader中定义了16/17/18/19

当前版本是18

m_size

 

pri

priority优先级

rr

read_report

是否收到了阅读报告

rpt_a

 

resp_st

response status

发送彩信后,mmsc应答的状态

字段X-Mms-Response-Status

m_type=MESSAGE_TYPE_SEND_CONF

st

status彩信状态

X-Mms-Status Field

tr_id

 

retr_st

 

retr_txt

 

retr_txt_cs

 

read_status

 

ct_cls

 

resp_txt

 

d_tm

 

d_rpt

delivery report

是否收到了送达报告,这个字段其实

是无效的,起作用的是单独的一条

送达报告记录

locked

是否锁定,默认0=不锁定

seen

用户是否看过这条信息的通知

0-没看过;1-看过了

 

公共表canonical_addresses,存放thread的收件人的地址

_id

流水号

address

号码:电话号码或email

 

彩信part表:存储彩信内容、附件等

_id

流水号

mid

对应pdu._id

seq

 

ct

content内容类型如图片image/jpeg

name

 

chset

 

cd

 

fn

 

cid

 

cl

 

ctt_s

 

ctt_t

 

_data

附件的存储位置如

/data/data/com.android.providers

.telephony/app_parts/PART_316077722124

text

 

 

公共pending_msgs表:待发送信息表

_id

流水号

proto_type

 

msg_id

对应pdu._id

msg_type

信息类型,和pdu.m_type一样

err_type

 

err_code

 

retry_index

已尝试的发送次数

due_time

 

last_try

 

 

彩信addr表:地址表,主要字段是电话号码address

_id

流水号

msg_id

对应pdu.msg_id

contact_id

  • 电话本中联系人的id

    (好像数据并没有关联?)

address

号码

type

发出信息/接收信息,主要两个值151/137

151=PduHeader.To 

137=PduHeader.From

charset

 

 

彩信表drm

_id

 

_data

 

 

彩信表rate

sent_time

 

 

公共表words

_id

 

index_text

 

source_id

 

table_to_use

 

 

MessageListAdapter.java会监听数据的变化onContentChanged,然后在ComposeMessageActivity.mDataSetChangedListener.onContentChanged查询数据,查询完成后在BackgroundQueryHandler.onQueryComplete中调用mMsgListAdapter.changeCursor(cursor);又回到MessageListAdapter,数据cursor变化引起界面重绘,这样某一条信息的下载状态就实时显示了如正在下载、没有下载等。

ConversationListAdapter.javaMessageListAdapter.java两个Adapter都注册了数据变化的监听器,最后在ActivityConversationList.javaComposeMessageActivity.java中显示出来

字段read:如果sms.type/mms.msg_box不是1-收件箱,该字段值在insert数据的时候都会赋值1-已读(不是收件箱,这个字段就没用了),赋值是在SmsProvider.insert和MmsProvider.insert中

read和seen很多时候同时为0或1,但是也有不一致的情况,如:同时收到多个联系人的信息时,会在状态条下拉栏提示,当用户进入(无论是点击通知进入还是点击mms程序进入)到conversationlist而不是messagelist,没有真正阅读这些信息),这seen=1表示用户已看过通知(即使重启手机也不会再提示了),read=0表示用户没看过信息

MMS中保存数据库的操作可以搜索:Inbox.CONTENT_URI,对彩信的保存还有persist


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值