android短信内容、通话记录、浏览器的上网记录 分别在数据库中哪个表中?

android短信内容、通话记录、浏览器的上网记录 分别在数据库中哪个表中?,第1张

短信是:data/data/com.android.providers.telephony目录下的mmssms.db数据库文件中的sms表

通话记录:data/data/com.android.providers.contacts目录下的contacts2.db数据库文件中的call表

浏览器的上网记录不太清楚,希望能够帮助到你!

android的联系人数据库是一个三层架构,raw_contacts表,contacts表,data表合起来,才能完整的表示一个联系人的所有信息。那为什么不直接设计一张contacts表示所有联系人呢?理由是,联系人的数据是易变的,而且数据种类繁多。打个比方,你可以随意的把两个联系人合并在一起,也可以随意的为一个联系人增加新的信息(如家庭地址,邮件地址,昵称,头像等等),把所有信息合并放在一张表里明显是不可能的。数据库设计时考虑的可扩展,可维护。

由于android底层的数据库很复杂,开发者想得到一个联系人的信息时,经常需要访问3-4张的表才能获取到完整数据,这个过程是很复杂很繁琐的。好在开发时你不用关注这些,因为android帮你把这些已经封装好了,你能看到也就是ContactsContract这个类里面抽象好了的映射。事实上,ContactsContract这个类是根据功能进行抽象的,和底层实现完全没有任何关系。他们之间通过某个ContentProvider连系起来,当你请求content://com.android.contacts/contacts这个字段时,会调用ContentProvider,ContentProvider根据你的uri生成查询不同的表的sql语句,然后把查询结果返回给你。

结果表现就是,你在ContactsContract这个类看到某些字段在对应的表里找不到,因为这个字段被放到其他的表里面去了。

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

/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)

具体的内容你可以看看原文啊:http://blog.sina.com.cn/s/blog_74c22b210100r0kn.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6911473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-30
下一篇 2023-03-30

发表评论

登录后才能评论

评论列表(0条)

保存