在2.0版本之前,获取通讯录中的联系人及其电话号码的方式如下:
String string = "";
super.onCreate(savedInstanceState);
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext())
{
int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = cursor.getString(nameFieldColumnIndex);
int numberFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);
String number = cursor.getString(numberFieldColumnIndex);
string += (contact+":"+number+"\n");
}
但是在2.0及之后的版本中,获取联系人的方式不变,但是电话号码的方式发生改变, 具体代码如下:
String string = "";
super.onCreate(savedInstanceState);
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext())
{
int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = cursor.getString(nameFieldColumnIndex);
string += contact + ":";
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactId, null, null);
while (phone.moveToNext())
{
int numberFieldColumnIndex = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String strPhoneNumber = phone.getString(numberFieldColumnIndex);
string += " " + strPhoneNumber;
}
string += "\n";
phone.close();
}
cursor.close();
可见,在2.0之后的版本中要获取手机号码就只能通过先取得联系人ID然后再取得联系人电话号码, 而且号码可能不止一个.
分享到:
相关推荐
这篇博客文章《android中ContactsContract获取联系人的方法》深入探讨了如何使用这个API来有效地获取和操作Android设备上的联系人数据。 首先,我们需要理解`ContactsContract`类的结构。它定义了一系列的常量和Uri...
2. **ContactsContract类**:ContactsContract是一个抽象类,定义了各种常量和类,它们代表了联系人的不同部分,如名字、电话号码、电子邮件地址等。例如,ContactsContract.Contacts表用来存储联系人的基本信息,...
接下来,我们可以通过ContentResolver和ContactsContract类来获取通讯录数据。ContentResolver是Android系统提供的用于与内容提供者交互的接口,而ContactsContract是Android提供的用于访问联系人数据的类。以下代码...
2. 获取联系人详情:对于每个ID,查询ContactsContract.CommonDataKinds.Phone表,获取电话号码、邮箱等详细信息。 3. 将数据写入TXT:将查询结果格式化为TXT文件的行,每一行代表一个联系人,包括姓名、电话号码等...
5. **SIM卡联系人**:Android系统通常不会直接提供API来读取SIM卡上的联系人,但可以通过监听电话状态和SIM卡状态的改变,然后通过TelephonyManager类获取SIM卡信息。例如,当SIM卡状态改变时,可以调用`...
开发者可以通过`ContactsContract.Contacts`、`ContactsContract.CommonDataKinds.Phone`等常量来获取联系人名、电话号码等信息。 4. **点击事件处理**: - 当用户点击ListView中的某一项时,会触发`...
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "新的电话号码"); resolver.update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data.LOOKUP_KEY + " = ? AND " + ...
6. **电话服务(TelephonyManager)**:Android提供的系统服务,用于获取电话状态、拨打电话号码等。 7. **数字键盘(Dialpad)**:使用自定义View或者系统提供的`NumberPicker`来实现拨号盘,处理用户的点击事件,...
`getContactPhoneNumber()`是一个辅助方法,用于根据联系人ID获取其电话号码,这通常需要再次查询。 接下来,为了实现搜索过滤功能,我们可以添加一个EditText,监听其文本变化事件。每当用户输入时,更新ListView...
系统联系人数据就是通过ContentResolver和ContactsContract类来获取的。例如,可以使用`ContentResolver.query()`方法,传入ContactsContract.CommonDataKinds.Phone.CONTENT_URI作为参数,来获取所有联系人的姓名和...
例如,ContactsContract.Contacts类提供了获取所有联系人信息的方法,而ContactsContract.CommonDataKinds类包含了各种常见的联系人数据类型,如电话、电子邮件等。 在实际开发中,为了确保用户隐私,还需要遵循...
3. **获取通讯录数据**:在`updateContacts()`方法中,我们可以使用ContentResolver查询ContactsContract类提供的常量来获取通讯录数据。例如,查询所有电话号码: ```java String[] projection = {...
- 使用ContentResolver的query()方法,传入ContactsContract.CommonDataKinds.Phone.CONTENT_URI来获取所有联系人的电话数据。 - 查询时,可以指定需要的列,例如DISPLAY_NAME(显示名)和PHONETIC_NAME(音译名)...
2. **数据封装**:将从通讯录获取到的数据进行适当的封装,通常会创建一个自定义的Contact类,包含姓名、电话号码等字段,然后将查询结果映射到这个类的实例中,形成一个Contact对象列表。这一步骤便于后续的数据...
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "电话号码"); values.put(ContactsContract.CommonDataKinds.Email.DATA, "电子邮件"); ``` 3. **选择联系人数据集**:根据你的需求,你可能需要决定将...
要写入联系人,我们需要使用`ContactsContract.RawContacts`表来创建新的联系人记录,并通过`ContactsContract.Data`表添加具体字段,如姓名、电话、电子邮件等。 三、创建联系人 1. 创建一个`ContentValues`对象...
开发者可以通过ContentResolver查询`ContactsContract.Contacts`、`ContactsContract.CommonDataKinds.Phone`和`ContactsContract.CommonDataKinds.Email`等表来获取姓名、电话号码和电子邮件地址等信息。...
在Android 4.4中,电话服务通过`Phone`接口暴露给上层应用,开发者可以注册监听器来获取电话状态更新,如来电、去电、通话结束等事件。 二、电话状态监听(Phone State Listening) Android 4.4提供`...
`ContactProvider`主要负责管理联系人数据,包括姓名、电话号码等,而`TelephonyProvider`通常涉及到更深入的电话功能,如通话状态监听。在获取通话时间的场景中,我们通常会查询`Calls.CONTENT_URI`,这是`...
开发者需要查询`ContactsContract.Contacts`表来获取联系人信息,如果需要获取具体联系人的电话和邮箱,还需要查询`ContactsContract.CommonDataKinds.Phone`和`ContactsContract.CommonDataKinds.Email`。...