- 浏览: 87850 次
- 性别:
- 来自: 北京
最新评论
-
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 1096转载 http://blog.csdn.net/tianjf0 ... -
如何屏蔽android webview高度选中框
2014-02-19 12:04 747如标题所述,解决方法是在 html的样式中加入 *{-webk ... -
屏蔽ScrollView惯性滚动的方法
2013-08-08 13:36 5714ScrollView中有一种惯性滚动的效果,想让这个Scrol ... -
android 图片LOMO效果
2013-07-25 13:59 872import android.graphics.Bitmap; ... -
GitHub最火的android 项目
2013-07-25 13:14 780GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到 ... -
listview 点击列表项时,项中的Button会触发点击效果
2013-06-05 19:21 1284开发中,难免会在列表项中, 加入Button ,而button ... -
圆形不滚动的进度条
2013-05-17 11:38 849这种效果的进度条 代码如下: package com. ... -
最靠谱的禁止ViewPager滑动方法
2013-05-15 14:44 4957最近做项目要求某种情况下ViewPager不能滑动,在网上找了 ... -
viewpager主页面响应子页面 onkeydown事件的方法
2013-05-13 19:35 1618大家在开发中不少地方要用到ViewPager这个类,ViewP ... -
Mina 学习笔记 TCP主要接口
2013-05-05 23:21 1225(1.)IoService: 这个接口 ... -
android动画插件器
2013-04-27 10:01 830首先要了解为什么需要插值器,因为在补间动画中,我们一般只定义关 ... -
imageView 的 android:maxHeight,maxWidth属性
2013-03-29 10:17 816大家使用android:maxHeight,maxWidth属 ... -
android中获取下载地址文件的类型的方法
2013-03-28 11:33 1025MimeTypeMap mimeTypeMap = Mime ... -
res与res-auto的区别
2013-03-27 14:55 3961通常我们在布局文件中使用自定义属性的时候 会这样写 xmln ... -
滑动开关控件
2013-03-26 22:39 815public class SlidButton exten ... -
TextView使用SpannableString设置复合文本
2013-03-23 23:35 8811、BackgroundColorSpan 背景色 Sp ... -
Android编程之SparseArray<E>详解
2013-03-21 23:03 985一、构造 从构造方法我 ... -
判断系统是否支持 DownloadManager服务
2013-03-18 14:25 862public static boolean isDownloa ... -
android ndk native_activity.h
2013-03-12 15:25 1768#ifndef ANDROID_NATIVE_ACTIVITY ... -
android ndk obb.h
2013-03-12 15:14 1133#ifndef ANDROID_OBB_H #define A ...
相关推荐
"Android应用源码之sms.zip"提供的源码很可能是关于如何在Android系统中处理短信功能的一个示例或学习资源。源码通常包含了完整的类、方法、变量和逻辑,可以帮助开发者深入理解Android SMS API的使用和实现细节。...
在Android系统中,短信数据存储在SQLite数据库中,主要涉及两个核心表格:Threads表和sms表,还有一个辅助的Canonical_addresses表。这些表格协同工作,管理用户的短信收发记录和会话信息。 Threads表是会话的中心...
"Android应用源码之Mms.zip"是一个压缩包,其中包含了Android系统MMS应用程序的相关源代码,供开发者进行参考和学习。这份源码对于深入理解Android系统中的MMS处理机制、实现自定义消息应用或者优化现有应用具有重要...
Android应用源码之Mms.zip项目安卓应用源码下载Android应用源码之Mms.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
这个名为"Sms.rar"的压缩包包含了一个关于Android SMS(Short Message Service)功能的源码实现,特别提到了MMS(Multimedia Messaging Service)的支持,这允许发送和接收包含多媒体内容的消息。下面将详细解释这些...
这个压缩包"SMS.rar"和"android_android sms.zip"包含的可能是一系列与在Android系统上编程短信功能相关的资源和代码示例。让我们深入探讨一下这个话题。 1. **Android SMS API**: Android提供了`SmsManager`类,...
2. **短信提供者(SmsProvider)**:Android系统使用SQLite数据库来存储短信,SmsProvider是内容提供者的一种,用于管理和访问短信数据。它提供了增删改查短信的标准接口,供应用程序通过ContentResolver进行操作。 ...
- 短信数据库:保存短信记录,通常位于/data/data/com.android.providers.telephony/databases/mmssms.db,可以通过SmsManager类进行操作。 - 多媒体数据库:MediaStore类提供了对音频、视频、图片等多媒体文件的...
通过深入理解 Android 系统的 SMS 模块源码,开发者可以更好地定制 SMS 功能,例如实现自定义短信应用、优化短信接收效率、增强安全性等。同时,了解 SMS 源码也有助于对 Android 系统整体架构有更全面的认识。
消息中心MMSSMS数据库整理文档
1. 数据存储:服务端使用SQLite数据库存储Mms信息,包括`mmssms.db`文件。`com.android.providers.telephony.MmsProvider`实现了ContentProvider接口,为其他应用提供Mms数据的CRUD(创建、读取、更新、删除)操作。...
`com.android.providers.telephony.SmsProvider`是Android系统用于存储短信数据的SQLite数据库提供者。它实现了ContentProvider接口,使得其他应用可以通过URI查询、插入、更新或删除短信记录。 3. **...
"安卓 短信发送_安卓SMS" 强调了该资源与Android系统中的短信发送功能密切相关。 【描述】提到的内容表明,这个压缩包提供的是实现Android短信接收和发送功能的源代码。对于开发者来说,这是一个宝贵的资源,可以...
《安卓Android源码深度解析——聚焦Mms》 在安卓操作系统的世界里,源代码是开发者探索系统内部工作原理、优化应用性能以及定制个性化系统的钥匙。本文将深入剖析Android源码中的Mms模块,揭示其在短信和彩信服务中...
6. **短信服务组件**:在源码中,你可能会找到如`com.android.internal.telephony.SmsService`这样的类,它们是实际处理短信操作的底层服务。这些服务通常由特定的RIL(Radio Interface Layer)驱动调用,RIL是...
本压缩包"MMS.zip"中包含的资源,显然与Android系统下的MMS功能开发相关,特别是关于接收和发送MMS的源码。以下是针对这一主题的详细知识解析: 1. **MMS服务框架**:Android系统提供了一个名为`com.android.mms`的...
短信数据库主要由系统维护,通常位于`/data/data/com.android.providers.telephony/databases/mmssms.db`路径下,这是一个SQLite数据库。数据库中有多个表,包括`sms`表,用于存储接收到和发送出去的短信。短信根据...
Mms.rar压缩包包含了这一模块的源代码,是深入理解Android MMS服务实现原理的重要资源。下面将对这一模块的关键知识点进行详细介绍。 1. **MMS架构**: Android的MMS服务基于PDU(Protocol Data Unit)模型,分为...
在Android系统程序源码中,`androidManifest.xml`文件扮演着至关重要的角色。它是每个Android应用的核心配置文件,用于定义应用程序的基本属性、所需权限、组件(如活动、服务、广播接收器和内容提供者)以及它们...