您必须以编程方式阅读联系人并将它们显示ListView
在您的Activity
. 在项目中使用CheckBox
sListView
并允许选择多个项目。为 a 找到一个简单的示例/教程,ListView
然后从那里开始。
有几个原因可以说明为什么最好创建自定义ListView
而不是使用Intent(Intent.ACTION_GET_CONTENT);
:
- 可能无法按照您的要求选择倍数。
- 即使您找到了一种选择倍数的方法,它在每个操作系统版本和设备上都会有所不同,并且可能不适用于所有这些。
- 如果在任何可以处理的设备上安装了多个应用程序
ACTION_GET_CONTENT
,则将向用户呈现一个选择器,他必须选择其中一个。用户的选择可能不支持选择多个联系人。
这是一个读取系统联系人的示例:
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if("1".equals(hasPhone) || Boolean.parseBoolean(hasPhone)) {
// You know it has a number so now query it like this
Cursor phones = myActivity.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
int itype = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
final boolean isMobile =
itype == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE ||
itype == ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE;
// Do something here with 'phoneNumber' such as saving into
// the List or Array that will be used in your 'ListView'.
}
phones.close();
}
}