- 浏览: 31793 次
文章分类
最新评论
论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
………
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
Sms表字段说明
_id: 区分不同的短信。
threads_id: (外键)引用threads表的_id.
date: 该条短信接收的时间
read: 0表未读,1表已读
body: 表示具体的短信内容,(注意,虽然在thread表的snippet字段已经存储了一部分body,但是那里的并不全,仅仅是一部分body)
locked: 该字段我也不是很清楚,用到的不多,不过如果我标识某条信息为locked时,当我再删除这条信息时,系统会提示我“是否删除locked信息”。
很明显以上:_id为4.或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
…..
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
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
如果该联系人被存为联系人,那么此人发彩信以及彩信时时,会在你的手机上这样显示
首先明了未接信息的数据库的位置在系统
/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
………
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
Sms表字段说明
_id: 区分不同的短信。
threads_id: (外键)引用threads表的_id.
date: 该条短信接收的时间
read: 0表未读,1表已读
body: 表示具体的短信内容,(注意,虽然在thread表的snippet字段已经存储了一部分body,但是那里的并不全,仅仅是一部分body)
locked: 该字段我也不是很清楚,用到的不多,不过如果我标识某条信息为locked时,当我再删除这条信息时,系统会提示我“是否删除locked信息”。
很明显以上:_id为4.或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
…..
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
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
如果该联系人被存为联系人,那么此人发彩信以及彩信时时,会在你的手机上这样显示
发表评论
-
android页面布局 中间的listView填充剩余部分
2016-12-05 17:29 639<?xml version="1.0" ... -
Eclipse Memory Analyzer 分析内存溢出
2016-10-19 11:37 0一 安装篇 1. eclipse 自 ... -
MSBuild命令行编译Xamarin 项目
2016-04-19 14:42 1137Xamarin 平台: C# language – 使用C ... -
微信聊天左滑显示删除实现
2016-04-06 18:04 852参考http://blog.csdn.net/xiaanmin ... -
Handler Thread
2016-03-21 16:42 432介绍 首先我们来看看为什么我们要使用HandlerThread ... -
Android Handler 作用
2016-03-21 15:31 369Android handler 作用: 什 ... -
Android UI 线程和子线程通信
2016-03-18 18:24 0从主线程发送消息到子 ... -
数据库升级
2016-03-07 17:09 0转自: http://892848153.iteye.com/ ... -
Android ListView 问题汇总
2016-01-11 11:16 497Listview 问题汇总: 1. it ... -
Intent与Activity启动模式相关的Flag
2015-11-27 16:08 370网上对于 Intent 的 flag 做了很多介绍,都 ... -
android 让一个控件按钮居于底部的几种方法
2015-04-09 15:00 0android 让一个控件按钮居于底部的几种方法 1.采用li ... -
Service 理解
2015-03-11 19:08 01. Service 也是运行在主线程,和Activity级别 ... -
回调 同步 异步
2014-12-16 17:34 0回调 同步 异步 -
JSON
2014-12-16 17:33 0JSON 的使用场景 -
远程service
2014-12-16 17:32 0远程Service使用场景: 1. 远程Service-- ... -
Android 实现两个控件分别靠左侧边缘和右侧边缘,且不重叠
2014-12-11 16:02 40441. 使用relativeLayout 从右侧往左侧加,但是问 ... -
Android SMS 数据库
2013-11-18 14:57 792$ adb shell $ cd data/data $ cd ... -
PC 操作Android手机
2013-11-15 18:10 556https://code.google.com/p/andro ... -
下载Android source 问题
2013-10-17 10:34 602fatal: '../platform/abi/cpp.git ... -
查看Android数据库
2013-03-19 15:26 5721. adb shell; 2. cd data/data 3 ...
相关推荐
短信数据库表名(_id integer 唯一标识,自增,从1开始 date integer 会话最新更新时间 message_count integer 当前会话所包含的消息数量 recipient_ids text 接收者(canonical_addresses表的id)列表,所有接收者...
Android应用源码之Mms.zip项目安卓应用源码下载Android应用源码之Mms.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
Android 源码参考学习
消息中心MMSSMS数据库整理文档
安卓Android源码——Mms.rar
android 发短信源码 自己写的源码 可以拿去看看 有注释
该程序可以提取yaffs文件系统映像(通常由恢复备份生成)或仅在映像中搜索联系人和SMS数据库。 callog2xml 该程序将contacts2.db转换为可由Ritesh Sahu进行的“读取的XML呼叫日志。 转换您的contacts2.db,将生成的...
android 短信接收发送源码 android MMS Send
android-2.2 mms.apk 复制短信到usim卡
短信设置(com.android.mms).bak
android4.1(JellyBean) 短消息模块源码 Mms.rar,git下载后,打包的,去除了git信息,只有源码
Android 系统应用 Mms 源码,2013年11月份下载
包涵几乎所有安卓原生应用源码 BlueTooth 蓝牙程序 Browser 原生浏览器 Calculator Camera Contacts 通讯录 DeskClock 桌面时钟 Email 电子邮箱程序 Gallery Launcher2 Music Mms MusicFX Nfc 射频通信 Settings ...
一个发送MMS SMS的Symbian 6的源程序,可作学习所用
required documentation, it still takes considerable time to understand ASN.1 and MMS. This document is intended to help boot-strap individuals in the educational process. In order to achieve an ...
android源生Mms代码结构说明.pdf
Android Mms专题之:MMS支持
Android的短信的时间的显示做的很精细,首先保存在短信数据库mmssms.db中的短信时间都是Long型的数字,查询动作结束,取到这个值之后,会做转换,具体转换的动作在MessageUtils.java的formatTimeStampString函数中...