http://hi.baidu.com/zcq100/blog/item/44bb68c6c38a8e119d163da0.html
上次开发了一个gmail联系人转换为android联系人的小程序查看
看到大家对这个通讯录的结构和他是如何保存数据的还有点迷茫。
这里再讲一课,让更多人来了解通讯录的结构。
在android里面大量用到了sqlite3数据库存储数据,我们的联系人,通话记录,分类,缩略图像都是存放在
/data/data/com.android.providers.contacts/databases/contacts.db
这个文件里面
我现在带大家仔细研究下这个文件。问了防止误操作,我们把这个文件单独拷出来。
adb shell //进入到手机shell里面
cp /data/data/com.android.providers.contacts/databases/contacts.db / //把contacts.db拷贝到根目录
sqlite3 contacts.db // 加载数据库
sqlite> .help
.help
.bail ON|OFF Stop after hitting an error. Default OFF
.databases List names and files of attached databases
.dump ?TABLE? ... Dump the database in an SQL text format
.echo ON|OFF Turn command echo on or off
.exit Exit this program
.explain ON|OFF Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF Turn display of headers on or off
.help Show this message
.import FILE TABLE Import data from FILE into TABLE
.indices TABLE Show names of all indices on TABLE
.load FILE ?ENTRY? Load an extension library
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML <table> code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.prompt MAIN CONTINUE Replace the standard prompts
.quit Exit this program
.read FILENAME Execute SQL in FILENAME
.schema ?TABLE? Show the CREATE statements
.separator STRING Change separator used by output mode and .import
.show Show the current values for various settings
.tables ?PATTERN? List names of tables matching a LIKE pattern
.timeout MS Try opening locked tables for MS milliseconds
.timer ON|OFF Turn the CPU timer measurement on or off
.width NUM NUM ... Set column widths for "column" mode
.help可以获取详细的帮助信息,这里列出了很多常用的命令,包括数据库的加载,导入导出,设置输出宽度,格里夫,查看表和备份数据等命令
sqlite> .table
.table
_deleted_groups contact_methods peopleLookup
_deleted_people extensions phones
_sync_state groupmembership photos
_sync_state_metadata groups settings
android_metadata organizations voice_dialer_timestamp
calls people
这里我们能得到很多有用的信息,首先我们知道这个数据库里面有一系列的表,包括通话记录,联系人,缩略图像(以base64编码的),联系人组,铃声设置,语音拨号,同步状态,删除组和删除联系人 等等。大学学过数据库的同学应该都熟悉基本的sql语句吧,这里我们可以通过DML来管理数据,select查询update更新delete删除
sqlite> select * from phones;
select * from phones;
1045|1032|2|15916266xxx|87066261951||1
1046|1033|2|02366525xxx|31352566320||1
1047|1034|2|10607138926xxx|68462983170601||1
1048|1035|2|13002329xxx|86892320031||1
1049|1036|2|13476483xxx|82938467431||1
1050|1037|2|02366685xxx|95158666320||1
1051|1038|2|07132694xxx|70649623170||1
1052|1039|2|15971371xxx|75117317951||1
1053|1040|2|13117151xxx|03215171131||1
这里查询到了所有联系人电话信息,熟悉数据库的朋友肯定知道,这里还关联了其他的表
sqlite> select * from calls;
select * from calls;
1|15823506xxx|1251703788223|33|1|1|鑼?鐜瞸2|
2|13167870xxx|1251713299121|0|2|1||0|
3|13167870xxx|1251713377134|0|2|1||0|
4|13167870xxx|1251713713422|0|2|1||0|
5|13167870xxx|1251713771272|0|2|1||0|
6|13167870xxx|1251713865558|0|2|1||0|
查询通话记录,时间戳
我写到这里大家就应该有了一个初步的了解了。首先我们的联系人是通过数据库文件存放在手机上的,也就是我们能够通过拷贝这个文件到其他的地方,然后覆盖还原即可。
同理,我们的短信书签之类的信息也是可以通过覆盖还原的。很多的备份工具都是这么做的。如果有人感兴趣可以自己去实现代码,不会android编程的朋友可以去写一个sh脚本文件来实现这一功能,对rom开发有兴趣的朋友还可以把这个脚本集成到rom里面去,这样我们的rom就有了自带的备份信息和还原信息的功能了,而不需要再去安装一个apk,是不是很省事。
我最近在弄一个项目,不能为大家做脚本和apk了,实在抱歉。对此感兴趣的朋友可以来找我讨论。
分享到:
相关推荐
首先,Android联系人APP源码剖析这一标题表明本文将重点讲解Android平台上联系人管理应用的源码,尤其是基于Android 2.3版本进行的分析。通过这种剖析,开发者可以更好地理解如何定制及使用源码,以构建或优化联系人...
在Android平台上,联系人模块是应用开发中的一个重要组成部分,它允许用户管理他们的个人联系信息,如姓名、电话号码、电子邮件地址等。对于初学者来说,理解并实现这一功能可以帮助他们更好地掌握Android应用开发的...
该活动的布局文件`peopleactivity.xml`定义了一个`FrameLayout`容器,其中包含了`ViewPager`和一个用于显示联系人不可用状态的`FrameLayout`。`ViewPager`是一个可滑动的视图,允许用户在不同的页面或视图之间导航,...
本项目“android平台联系人管理应用源码+项目”提供了一个可以直接运行的实例,对于学习和理解Android联系人管理的实现机制非常有帮助。以下是基于这个项目的一些关键知识点和详细说明: 1. **Android开发环境**:...
android联系人模块分析文档
这篇博客"Android 系统联系人操作"可能是探讨如何在Android应用中与系统联系人数据库进行交互,包括添加、删除、修改和查询联系人等操作。我们将深入探讨这些关键知识点。 1. **Android权限管理**: 在Android中,...
在Android系统中,联系人应用是用户日常交互的重要部分,其功能包括添加、编辑和查找联系人等。本文将深入探讨如何实现一个全特效的联系人应用,特别是字母表快速滚动的功能,使得用户能快速定位到特定联系人的名字...
通过对SIM卡联系人加载及操作流程的分析,我们可以得出以下结论: - **初始化的重要性**:在系统加载SIM卡联系人时,必须等待SIM卡完全初始化后才能进行其他操作,否则会导致插入失败等问题。 - **多线程注意事项**...
开发者可以通过阅读和分析这些代码,进一步理解如何在实际应用中实现联系人管理功能。 总之,"android_实战_联系人"项目是学习和提升Android ContentProvider应用的绝佳实践。通过这个项目,开发者不仅能了解...
在Android开发中,联系人快速索引是一项常用功能,它能帮助用户快速定位到所需的联系人,提升用户体验。"Android 联系人快速索引源码.zip"这个压缩包包含了一个实现这一功能的源代码示例。接下来,我们将详细讨论这...
本项目“Android联系人管理”旨在提供一个基本的实现,涵盖新建、编辑、删除联系人以及对联系人分组的操作。下面将详细阐述这个项目中的核心知识点。 1. **联系人ContentProvider**: Android中的联系人数据存储在...
通过阅读和分析这些文件,开发者可以更深入地理解Android中如何操作联系人数据以及实现拨打电话的功能。 总结来说,这个项目涉及了Android的权限管理、ContentResolver、ContactsContract API、数据查询、UI交互...
总的来说,“ContactTest”项目应该是对这个过程的一个实践,通过阅读和分析项目代码,你可以更深入地理解Android联系人管理和自动过滤显示的实现原理。同时,了解和掌握这些知识对于开发高效、用户友好的Android...
### Android联系人数据库详解 #### 一、引言 Android系统的联系人管理功能是移动通信应用中的重要组成部分,本文将详细解析Android系统中与联系人相关的数据库架构与数据存储方式,帮助开发者更好地理解和掌握...
总的来说,分析Android 4.0联系人源代码能够帮助开发者深入理解Android系统中数据管理、组件交互、UI设计以及性能优化等方面的知识,这对于开发自己的Android应用,特别是涉及用户数据的应用,具有很高的参考价值。...
【Android联系人模块分析】 1. **简介** Android联系人模块是操作系统核心组件之一,它负责管理和存储用户的联系人信息。本机联系人数据存储在手机内部的SQLite数据库中,由Content Provider(ContactsProvider)...
这个压缩包文件“Android高级应用源码-仿qq通讯录联系人.zip”是关于在Android平台上构建一个类似于QQ通讯录的高级应用的源代码。它包含了一个完整的项目结构,可以帮助开发者学习和理解如何在Android中实现高效且...
在Android应用开发中,批量删除联系人是一项常见的功能,尤其对于管理大量联系信息的应用来说更是必不可少。...通过阅读和分析源码,你可以更深入地理解Android的Content Provider机制以及如何在实践中操作联系人数据。
在Android开发中,联系人应用是用户日常使用的重要部分,为了提供良好的用户体验,通常需要实现一个功能,即字母快速定位,让使用者能迅速找到所需的联系人。标题中的“Android 联系人 字母快速定位”就是指这个功能...
一、Android联系人管理 1. **Content Provider**:在Android中,联系人数据是通过Content Provider进行管理的,它是一个接口,允许应用访问和修改系统存储的数据。`ContactsContract`类提供了访问联系人的API,包括...