.android的Contacts是通过ContentProvider来提供的,其实android把contacts和SMS给组织成数据库文件了,你可以在File Explorer 的/data/data/com.android.provider.contacts下找到contacts.db,这就是电话本数据库文件,你手机里的contacts信息都在这个数据库的各张表里。
知道contacts信息是在一个数据库里就要知道这张数据库里的都有什么表,这些表的字段都有什么。我们可以把这个contacts.db文件提取出来,再用SQLite Expert Professional 2这个软件打开,就可以看到数据库的信息了。
4.可以看出和API说的一样,people和phones都是一张表,注意下phones这张表,这里就有我们要的所有电话号码信息。也可以看到以下两点:
4.1:phones表中的person字段对应为people表中的_id;
4.2: phones表中的type字段就是API中Contacts.PhonesColumns的TYPE字段,这个就是电话的7个分类,TYPE=2为moblie
5.这样就可以用代码来提取出来数据了,要注意一点,在用query()查找时的Uri直接指向phones表就OK。
view plaincopy to clipboardprint?
Cursor contactcursor = content.query(Contacts.Phones.CONTENT_URI, null,
null, null, Contacts.People.DEFAULT_SORT_ORDER);
Cursor contactcursor = content.query(Contacts.Phones.CONTENT_URI, null,
null, null, Contacts.People.DEFAULT_SORT_ORDER);
6.下面是一个完整的方法代码:
view plaincopy to clipboardprint?
/* 读取手机中的contacts内容 */
private void getContactsInfoListFromPhone() {
/* 取得ContentResolver */
ContentResolver content = this.getContentResolver();
/* 取得通讯录的Phones表的cursor */
Cursor contactcursor = content.query(Contacts.Phones.CONTENT_URI, null,
null, null, Contacts.People.DEFAULT_SORT_ORDER);
/* 在LogCat里打印所有关于的列名 */
for (int i = 0; i < contactcursor.getColumnCount(); i++) {
String columnName = contactcursor.getColumnName(i);
Log.d("readTXT", "column name:" + columnName);
}
/* 逐条读取记录信息 */
int Num = contactcursor.getCount();
Log.v("readTXT", "recNum=" + Num);
String name, number;
for (int i = 0; i < Num; i++) {
contactcursor.moveToPosition(i);
String type = contactcursor.getString(contactcursor
.getColumnIndexOrThrow(Contacts.Phones.TYPE));
Log.v("readTXT", "type=" + type);
String person_id = contactcursor.getString(contactcursor
.getColumnIndexOrThrow(Contacts.Phones.PERSON_ID));
Log.v("readTXT", "person_id=" + person_id);
name = contactcursor.getString(contactcursor
.getColumnIndexOrThrow(Contacts.Phones.NAME));
number = contactcursor.getString(contactcursor
.getColumnIndexOrThrow(Contacts.Phones.NUMBER));
// number = number == null ? "无输入电话" : number;// 当找不到电话时显示"无输入电话"
nameContactsInPhone.add(name);
Log.v("readTXT", "name=" + name);
numberContactsInPhone.add(number);
Log.v("readTXT", "*****number=" + number);
}
}
/* 读取手机中的contacts内容 */
private void getContactsInfoListFromPhone() {
/* 取得ContentResolver */
ContentResolver content = this.getContentResolver();
/* 取得通讯录的Phones表的cursor */
Cursor contactcursor = content.query(Contacts.Phones.CONTENT_URI, null,
null, null, Contacts.People.DEFAULT_SORT_ORDER);
/* 在LogCat里打印所有关于的列名 */
for (int i = 0; i < contactcursor.getColumnCount(); i++) {
String columnName = contactcursor.getColumnName(i);
Log.d("readTXT", "column name:" + columnName);
}
/* 逐条读取记录信息 */
int Num = contactcursor.getCount();
Log.v("readTXT", "recNum=" + Num);
String name, number;
for (int i = 0; i < Num; i++) {
contactcursor.moveToPosition(i);
String type = contactcursor.getString(contactcursor
.getColumnIndexOrThrow(Contacts.Phones.TYPE));
Log.v("readTXT", "type=" + type);
String person_id = contactcursor.getString(contactcursor
.getColumnIndexOrThrow(Contacts.Phones.PERSON_ID));
Log.v("readTXT", "person_id=" + person_id);
name = contactcursor.getString(contactcursor
.getColumnIndexOrThrow(Contacts.Phones.NAME));
number = contactcursor.getString(contactcursor
.getColumnIndexOrThrow(Contacts.Phones.NUMBER));
// number = number == null ? "无输入电话" : number;// 当找不到电话时显示"无输入电话"
nameContactsInPhone.add(name);
Log.v("readTXT", "name=" + name);
numberContactsInPhone.add(number);
Log.v("readTXT", "*****number=" + number);
}
}
7.从上面的代码可以总结一点经验,在不知道数据库表的字段时,可以用下面的方法来打印出来,就可以清楚后,再应用了:
view plaincopy to clipboardprint?
/* 取得通讯录的Phones表的cursor */
Cursor contactcursor = content.query(Contacts.Phones.CONTENT_URI, null,
null, null, Contacts.People.DEFAULT_SORT_ORDER);
/* 在LogCat里打印所有关于的列名 */
for (int i = 0; i < contactcursor.getColumnCount(); i++) {
String columnName = contactcursor.getColumnName(i);
Log.d("readTXT", "column name:" + columnName);
}
分享到:
相关推荐
这个项目,"基于android studio的读取联系人并可点击拨打电话",显然是一个教学或示例项目,它借鉴了郭霖的畅销书《第一行代码》中的方法。下面将详细讲解如何实现这一功能。 首先,我们需要了解Android的权限管理...
总结来说,Android开发中获取手机通讯录和SIM卡联系人信息,以及调用拨号界面,主要是通过Content Resolver查询系统提供的Content Provider,同时需要正确配置权限。理解并熟练运用这些方法,可以帮助开发者构建更...
本资源提供的"android4.0 Contacts 联系人jar包"是Android 4.0系统中用于处理联系人功能的核心库,它包含了与联系人相关的API和类,使得开发者能够更加方便地进行联系人应用的开发。 首先,Android 4.0的Contacts ...
在Android平台上,获取通讯录中的联系人信息是常见的功能需求,尤其当需要处理与电子邮件相关的应用时。这个DEMO展示了如何有效地读取那些在联系人信息中设置了电子邮件地址的联系人。下面我们将深入探讨实现这一...
以下是对这个"android读取系统联系人"主题的详细讲解: 1. **权限管理**: 在AndroidManifest.xml文件中,必须添加读取联系人数据的权限声明,这是由于Android系统的隐私保护机制。相应的权限声明如下: ```xml ...
在Android系统中,获取本机号码、联系人信息以及拨打电话是常见的功能需求,尤其是在开发与通讯相关的应用程序时。在Android 2.2(API级别8)版本中,这些功能的实现有一些特定的注意事项和权限要求。下面我们将详细...
本节将详细讲解如何在Android应用中读取联系人信息,以及与之相关的`firstname`、`middlename`等字段的处理。 首先,为了读取联系人数据,我们需要在AndroidManifest.xml文件中添加读取联系人权限。在`<manifest>`...
Contacts是Android系统中的核心组件之一,它负责管理和展示设备上的联系人信息。在Android 4.1.1版本中,Contacts应用程序经过优化,提供了更加高效和用户友好的体验。本文将深度剖析这一版本的Contacts代码,帮助...
在Android平台上,获取用户的联系人信息以及实现打电话和发送短信的功能是常见的应用场景,尤其是在开发社交或者通讯类应用时。下面将详细讲解如何在Android Studio中实现这些功能。 首先,我们需要了解Android的...
综上所述,Android应用通过ContentResolver和ContactsContract API可以方便地读取手机上的联系人信息。理解这一过程对于开发涉及个人信息管理的应用至关重要。同时,需要注意权限管理和性能优化,以提供更好的用户...
它实现了SQLite数据库操作,用于存储、读取和更新联系人信息。在源码中,我们可以看到如何使用SQLiteOpenHelper来创建和升级数据库,以及如何设计数据表结构。例如,`ContactsContract`类定义了数据的URI、列名和...
在Android和iOS等移动操作系统中,查看和获取联系人电话是一项常见的功能,广泛应用于社交应用、通讯工具和其他需要用户授权访问联系人信息的软件中。本文将深入探讨如何在这些平台上实现这一功能。 首先,我们从...
4. **遍历Cursor**:Cursor对象就像数据库查询的结果集,可以使用moveToFirst(), moveToNext()等方法遍历每一项联系人信息,获取如姓名、电话号码等字段。 5. **处理数据**:在遍历过程中,可以通过getString()方法...
在Android系统中,读取联系人信息是开发者常用的功能之一,尤其在开发社交或通讯类应用时。本文将深入探讨如何使用ContentProvider机制来获取手机电话簿中的联系人信息,包括姓名、电话以及头像。 首先,理解...
6. 将解析出的联系人信息插入到Android系统的Contacts Provider中。 在处理蓝牙通信时,还需要注意权限问题,确保在AndroidManifest.xml中添加了必要的蓝牙权限,如`<uses-permission android:name="android....
在Android系统中,获取手机联系人信息是常见的需求,尤其对于开发涉及通讯功能的应用来说更是必不可少。本示例("Android 读取手机联系人")通过内容提供器(Content Provider)这一核心组件来实现这一功能。内容...
在Android平台上,获取通讯录联系人信息是常见的需求,尤其对于开发涉及社交功能的应用来说更是必不可少。本示例源码提供了实现这一功能的方法,帮助开发者深入理解如何在Android应用中读取并操作用户通讯录数据。 ...
下面我们将深入探讨这个主题,了解如何在Android中访问联系人API,获取联系人信息,并将其显示出来。 1. **Android权限声明**: 在Android中,读取联系人数据需要在应用的`AndroidManifest.xml`文件中声明相应的...
本篇文章将深入探讨Android 4.0(Ice Cream Sandwich)中Contacts应用的源代码,帮助开发者了解并学习如何在Android平台上构建和管理联系人应用。 1. **Contacts架构** Android 4.0的Contacts应用采用分层架构,...
在Android系统中,获取联系人信息是常见的功能之一,它涉及到Android权限管理、Content Provider、意图(Intent)以及UI设计等多个方面。以下是对"Contacts获取系统联系人"这一主题的详细阐述。 首先,为了访问用户的...