- 浏览: 85445 次
- 性别:
- 来自: 北京
最新评论
-
LiuYiJie2007:
public static String getPublicK ...
Android publickey获取 -
LiuYiJie2007:
getPublicKey( )是你自己写法方法 是什么?new ...
Android publickey获取 -
liujia9234:
我试了,不行,最不靠谱了
最靠谱的禁止ViewPager滑动方法 -
kedongjun:
非常强大
关于android通讯录加载大数据的优化问题 -
xunhuan01:
view.getImageMatrix(), savedMat ...
多点触摸放大图片的自定义listener
论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信息”。
很明显以上:_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
…..
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
如果该联系人被存为联系人,那么此人发彩信以及彩信时时,会在你的手机上这样显示
很明显,他们应该属于同一个联系人
好了,我就用到这么多,希望对需要的人有所帮助,具体的自己去查看源码吧
首先明了未接信息的数据库的位置在系统
/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信息”。
很明显以上:_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
…..
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
如果该联系人被存为联系人,那么此人发彩信以及彩信时时,会在你的手机上这样显示
很明显,他们应该属于同一个联系人
好了,我就用到这么多,希望对需要的人有所帮助,具体的自己去查看源码吧
发表评论
-
Android_低版本使用ActionBar
2014-08-26 11:09 1066转载 http://blog.csdn.net/tianjf0 ... -
如何屏蔽android webview高度选中框
2014-02-19 12:04 711如标题所述,解决方法是在 html的样式中加入 *{-webk ... -
屏蔽ScrollView惯性滚动的方法
2013-08-08 13:36 5666ScrollView中有一种惯性滚动的效果,想让这个Scrol ... -
android 图片LOMO效果
2013-07-25 13:59 841import android.graphics.Bitmap; ... -
GitHub最火的android 项目
2013-07-25 13:14 751GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到 ... -
listview 点击列表项时,项中的Button会触发点击效果
2013-06-05 19:21 1250开发中,难免会在列表项中, 加入Button ,而button ... -
圆形不滚动的进度条
2013-05-17 11:38 804这种效果的进度条 代码如下: package com. ... -
最靠谱的禁止ViewPager滑动方法
2013-05-15 14:44 4919最近做项目要求某种情况下ViewPager不能滑动,在网上找了 ... -
viewpager主页面响应子页面 onkeydown事件的方法
2013-05-13 19:35 1549大家在开发中不少地方要用到ViewPager这个类,ViewP ... -
Mina 学习笔记 TCP主要接口
2013-05-05 23:21 1172(1.)IoService: 这个接口 ... -
android动画插件器
2013-04-27 10:01 782首先要了解为什么需要插值器,因为在补间动画中,我们一般只定义关 ... -
imageView 的 android:maxHeight,maxWidth属性
2013-03-29 10:17 777大家使用android:maxHeight,maxWidth属 ... -
android中获取下载地址文件的类型的方法
2013-03-28 11:33 976MimeTypeMap mimeTypeMap = Mime ... -
res与res-auto的区别
2013-03-27 14:55 3921通常我们在布局文件中使用自定义属性的时候 会这样写 xmln ... -
滑动开关控件
2013-03-26 22:39 758public class SlidButton exten ... -
TextView使用SpannableString设置复合文本
2013-03-23 23:35 8381、BackgroundColorSpan 背景色 Sp ... -
Android编程之SparseArray<E>详解
2013-03-21 23:03 941一、构造 从构造方法我 ... -
判断系统是否支持 DownloadManager服务
2013-03-18 14:25 816public static boolean isDownloa ... -
android ndk native_activity.h
2013-03-12 15:25 1731#ifndef ANDROID_NATIVE_ACTIVITY ... -
android ndk obb.h
2013-03-12 15:14 1101#ifndef ANDROID_OBB_H #define A ...
相关推荐
短信数据库表名(_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 发短信源码 自己写的源码 可以拿去看看 有注释
android 短信接收发送源码 android MMS Send
android-2.2 mms.apk 复制短信到usim卡
短信设置(com.android.mms).bak
android4.1(JellyBean) 短消息模块源码 Mms.rar,git下载后,打包的,去除了git信息,只有源码
该程序可以提取yaffs文件系统映像(通常由恢复备份生成)或仅在映像中搜索联系人和SMS数据库。 callog2xml 该程序将contacts2.db转换为可由Ritesh Sahu进行的“读取的XML呼叫日志。 转换您的contacts2.db,将生成的...
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 ...
包涵几乎所有安卓原生应用源码 BlueTooth 蓝牙程序 Browser 原生浏览器 Calculator Camera Contacts 通讯录 DeskClock 桌面时钟 Email 电子邮箱程序 Gallery Launcher2 Music Mms MusicFX Nfc 射频通信 Settings ...
Android 系统应用 Mms 源码,2013年11月份下载
一个发送MMS SMS的Symbian 6的源程序,可作学习所用
android源生Mms代码结构说明.pdf
Android Mms专题之:MMS支持
Android的短信的时间的显示做的很精细,首先保存在短信数据库mmssms.db中的短信时间都是Long型的数字,查询动作结束,取到这个值之后,会做转换,具体转换的动作在MessageUtils.java的formatTimeStampString函数中...