📅  最后修改于: 2023-12-03 14:52:05.846000             🧑  作者: Mango
在Android中,我们通常需要获取用户已保存的联系人信息。使用游标可以很方便地获取数据并进行处理。在本文中,我们将介绍如何使用游标在Android应用程序中获取已保存的联系人信息。
首先,我们需要获取联系人的基本信息,包括姓名和电话号码。我们可以使用ContentResolver
类和ContactsContract
构建查询,然后使用游标来获取数据。
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " ASC";
Cursor cursor = getContentResolver().query(uri, projection, null, null, sortOrder);
此处,我们使用了ContactsContract.Contacts.CONTENT_URI
获取联系人信息的URL。projection
数组包含我们需要返回的数据列。我们排序的方式是按照联系人姓名的字母顺序来进行排序。最后,我们使用getContentResolver().query()
方法执行查询,并将结果保存在cursor
游标对象中。
接下来,我们需要从游标中提取数据,包括联系人姓名和电话号码。我们可以使用ContactsContract.CommonDataKinds.Phone
和ContactsContract.Data
表来获取电话号码。
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Cursor phoneCursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{String.valueOf(id)},
null);
String phone = "";
if (phoneCursor.moveToNext()) {
phone = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phoneCursor.close();
// 处理联系人信息
Log.d(TAG, "Contact: " + name + " " + phone);
}
在上面的代码中,我们使用cursor.getLong()
和cursor.getString()
方法从游标中提取联系人的ID
和姓名。接下来,我们使用另一个游标phoneCursor
查询每个联系人的电话号码。查询条件为ContactsContract.CommonDataKinds.Phone.CONTACT_ID
等于当前联系人的ID。如果有电话号码,则使用phoneCursor.getString()
方法提取电话号码,否则为""
。
最后,我们在循环中对每个联系人信息进行处理,这里打印联系人姓名和电话号码。我们可以根据需要将信息存储到变量或集合中。
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " ASC";
Cursor cursor = getContentResolver().query(uri, projection, null, null, sortOrder);
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Cursor phoneCursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{String.valueOf(id)},
null);
String phone = "";
if (phoneCursor.moveToNext()) {
phone = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phoneCursor.close();
// 处理联系人信息
Log.d(TAG, "Contact: " + name + " " + phone);
}
cursor.close();
以上是使用游标在Android应用程序中获取已保存的联系人信息的示例代码。