Android系统源码数据库(mmssms.db)中几个表之间的关系.


Android系统源码数据库(mmssms.db)中几个表之前的关系.

 

首先明了未接信息的数据库的位置在系统

/data/data/com.android.providers.telephony/databases/mmssms.db 包下。

希望大家能够结合源码中的

1.       Telephony.java (主要讲这些表里有哪些字段)

2.       MmsSmsProvider.java ContentProvider被重写)

3.       MmsProvider.java (ContentProvider被重写)

4.       SmsProvider.java (ContentProvider被重写

5.  Conversation.java  描述 mmssms数据库的Threads

 

前一段时间在开发项目时,遇到这样的需求,要求将 未接短信,未接彩信的信息显示在Widget上。当我们查询mmssms.db数据库时,这其中涉及到以下几张表:

1.       threads

2.       存放短信的表(sms表)

3.       存放彩信的表(pdu,part表)

4.   存放phone number的表( Canonical_address表)

 

能否将未接短信,彩信信息直接显示在Widget上,关键是必须要搞清出这4张表之间的表关系。根据我的编码经验,先抛砖引玉地在这里讲解出我的理解

 

对于这几张表,我只简单地列出关键字段,省略部分均用(….)代替。

以下的 信息 指代(mms,sms


threads() 

查询该表时,所需要的uri:

MMS_SMS_URI = Uri.parse("content://mms-sms")

MSG_QUERY_URI = Uri.parse("content://mms-sms/ conversations ?simple=true")

可以这样得到 Uri MSG_QUERY_URI = Uri.withAppendedPath(MMS_SMS_URI,    "conversations").buildUpon().appendQueryParameter("simple", "true").build();

  

_id

date

message_count

recipient_ids

snippet

read

has_attchment

………

1

1302468989000

3

15

yulei team:你好,华为无线网络技术有限公司,诚邀您来进行面试....

 

0

1

 

2

1302343202189

1

32

京城最后升值时机!地铁4号线无缝接驳,首二机场伴您起飞!纯板社区景观美宅大产权,样板间华美绽放90平55万,三期优惠进行中67659006

 

1

0

 

3

1302359506000

1

33

《人力资源管理》实战特训班.主讲:企业招聘面试技巧、绩效管理与薪酬体系设计于4月14-16日人民大学授课.报名010-57810898

 

0

0

 

4

1302468808000

1

34

6个月与老外交流无障碍!资深外教一对一,定制式教育,口语快速突破的高效课程模式!好方法不怕试,免费体验课预约:51662230

 

0

0

 

 

threads表字段说明:

_id: 用于区分不同的电话号码,系统会为不同的电话号码分配不同的_id.

date: 收到信息的时间(如果收到来自同一个phone number多条信息,并且有对于一条信息未读,那么date表示收到的最后一条信息时的时间)

message_count: 收到的信息的数目(sms+mms

snippet: 如果来自某个phone number,仅仅有一条信息,那么会是如下情况

如果是未接短信,代表未接短信的内容

        如果是未接彩信,代表未接彩信的subject.

      如果来自某个phone number,仅仅有多条信息,那么则是如下情况

如果是最后一条是未接短信,代表最后一条未接短信的内容

如果是最后一条是未接彩信,代表最后一条未接彩信的subject.

      然而这个字段存储的仅仅是一条短信内容或者彩信subject的部分内容,其余内容用省略号表示。

read: 0. 代表未读。 1.代表 已读

has_attchment: 代表来自该phone number的信息是否包含有附件。 

依据上面的表结构,也许会有人问,phone number 呢?有这样的疑问是非常正常的,别着急,学过数据库的人都知道,表结构之间并不是孤立的,而是相互关联的。phone number 会在另外几张表中出现。

 

 

Sms

查询该表时的uri :   URI_SMS_INBOX = Uri.parse("content://sms/inbox") 

_id

thread_id

address

date

read

subject

body

locked

 

 

1

2

076922159797

1302343202189

1

<null>

京城最后升值时机!地铁4号线无缝接驳,首二机场伴您起飞!纯板社区景观美宅大产权,样板间华美绽放90平55万,三期优惠进行中67659006

 

 

 

 

2

3

+8613366790288

1302359506626

0

<null>

《人力资源管理》实战特训班.主讲:企业招聘面试技巧、绩效管理与薪酬体系设计于4月14-16日人民大学授课.报名010-57810898

 

 

 

 

3

4

+8618659506145

1302468808232

0

<null>

6个月与老外交流无障碍!资深外教一对一,定制式教育,口语快速突破的高效课程模式!好方法不怕试,免费体验课预约:51662230

 

 

 

 

4

1

1252013910095023

1302468964929

0

<null>

Lockscreen team:你好,microsoft公司,诚邀你来面试...

 

 

 

5

1

1252013910095023

1302468989263

0

<null>

Lockscreen team:你好,华为无线网络技术有限公司,诚邀您来进行面试....

 

 

 

 

 

Sms表字段说明 

_id: 区分不同的短信。

threads_id: (外键)引用threads表的_id.

date: 该条短信接收的时间

read: 0表未读,1表已读

body: 表示具体的短信内容,(注意,虽然在thread表的snippet字段已经存储了一部分body,但是那里的并不全,仅仅是一部分body

locked: 该字段我也不是很清楚,用到的不多,不过如果我标识某条信息为locked时,当我再删除这条信息时,系统会提示我“是否删除locked信息”。 

很明显以上:_id4.5的短信,来自同一个phone number,也就是说他们的thread_id是相同的.

 

 

Pdu表: 

URI_MMS_INBOX = Uri.parse("content://mms/inbox");

_id

Thread_id

date

Msg_box

read

M_id

sub

Ct_l

m_type

…..

1

1

1302256504

1

1

040817550491000002112

Lockscreïš15151656666

<null>

132

 

 

Pdu表字段说明:

_id: 区分不同的彩信

thread_id : 外键 (引用thread表的_id)

msg_box: 区分彩信的收件箱,发件箱,草稿箱等.

         很明显1.代表收件箱

read:是否已读,0 未读,1.已读

sub: 彩信的subject

ct_l: 如果彩信太大,或者由于网络原因,也又是由于手机设备原因,dowload失败,彩信看不了,这个字段就会有彩信的网址(我曾经见到过一次,http://格式的,就是一个网址)

 

Part表:

表的路径Uri MMS_PART_URI = Uri.parse("content://mms/part")

 

_id

mid

ct

cid

_data

text

 

1

1

application/smil

<mms.smil>

<null>

不用关心

 

2

1

text/plain

<1.txt>

<null>

I am mms body

 

3

1

audio/midi

<2.midi>

/data/data/com.android.providers.telephony/app_parts/PART_130228532714

 

<null>

 

4

1

image/gif

<3.gif>

/data/data/com.android.providers.telephony/app_parts/PART_1302285327200

<null>

 

5

1

image/gif

<4.gif>

/data/data/com.android.providers.telephony/app_parts/PART_1302285327255

<null>

 

6

1

text/plain

<5.txt>

<null>

中国移动飞信抢沙发活动火热登场!登录WAP飞信参与活动,iPod nano、手机等大奖每天轮换送!点击链接查看http://f.10086.cn/f/qzuo[通过移动梦网接入点访问免流量费]

 

 

7

1

text/plain

<6.txt>

<null>

【飞信提醒您】本条彩信不能以彩信方式回复

 

  

Part表字段说明: 

_id: 区分某条彩信的不同附件(包括文本,图片,音频,视频等格式)

mid: 外键,引用pdu表的_id.  指示该附件属于哪条彩信(一条彩信有可能包含有多个图片,多个音频,多个视频等)

ct: 指示附件是什么类型的(text/ 表示文本, audio/ 表示音频, video/表是 视频  image/

表示图片)

_data: 标明附件存放在手机的哪个地方

text: 表示彩信的body

 

 

Canonical_address

查询这张表所需要的uri:

MMS_SMS_ADDRESS_URI = Uri

                .parse("content://mms-sms/canonical-addresses");

 

_id

address

15

1-391-009-5023

32

076922159797

33

+8613366790288

34

+8618659506145

 

Canonical_address表字段说明:

_id: 外键,引用threads表的recipient_id字段

address: 代表给我们发短的那个人的phone number

 

对于编程时,phone number 1:  1252013423447866

                    如果该联系人没有被存为联系人,那么此人发彩信时,会在你的手机上这样显示

            Phone number 2:   +8613423447866

                    如果该联系人没有被存为联系人,那么此人发短信时,会在你的手机上这样显示 

            Phone number 3:   13423447866

                   如果该联系人被存为联系人,那么此人发彩信以及彩信时时,会在你的手机上这样显示

 

很明显,他们应该属于同一个联系人

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MMS-Lite是一种高性能、可靠的多媒体消息服务,具有广泛的应用场景,如短信、彩信、邮件等。该软件是开放源代码的,使用C++编写,支持各种操作系统和编译器。对于开发者而言,它提供了基于SOAP协议的API和Web服务,方便集成到现有业务系统MMS-Lite文参考手册为开发者提供了详细的使用和配置指南。手册对MMS-Lite的架构、安装、配置、管理和API等进行了系统地介绍,可以帮助开发者更好地了解和使用该软件。手册内容包括MMS-Lite的基本概念、安装步骤、启动流程、管理命令、配置文件结构、调试技巧、API接口及参数等方面,非常全面。 在使用MMS-Lite时,开发者需要根据实际需求进行配置,如设置消息队列容量、优化消息处理速度、添加新的数据存储等。MMS-Lite支持多种数据存储方式,如SQL数据库、文件系统、内存缓存等,开发者可以根据实际情况进行选择。 总的来说,MMS-Lite文参考手册是MMS-Lite开发者必备的工具之一,对于初学者和有一定开发经验的人员都非常实用,可以提高开发效率和消息服务的可靠性。 ### 回答2: mms-lite文参考手册.pdf是一份关于MMS Lite平台的用户手册。MMS Lite是一种移动多媒体服务,用户可以通过该平台发送和接收各种类型的多媒体消息。该手册主要涵盖MMS Lite平台的功能介绍、使用指引、系统配置、故障处理等内容,向用户提供了详细的操作指南和技术支持。在手册,用户可以了解到MMS Lite平台支持的文件格式、消息发送和接收的流程、系统配置参数的设置以及常见故障的处理方法等,帮助用户更好地理解和使用该平台。除此之外,手册还提供了一些实例和案例,方便用户更加深入地了解MMS Lite平台的使用场景和应用。总体而言,mms-lite文参考手册.pdf是一份非常实用的用户手册,能够为用户提供详细的操作指南和技术支持,帮助用户更好地利用MMS Lite平台进行移动多媒体服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值