Android 检索一组类似于内置联系人应用程序的联系人
Android retrieve a set of contacts similar to built in Contacts app
我正在使用如下代码,在我的 phone 上它有 returns 4000 多行,但在我的 phone 上我的通讯录应用程序中有 295 个联系人。
这是怎么回事?我一直在阅读联系人数据库,但我还不够熟悉,无法弄清楚。
谢谢!
final ContentResolver cr = getContentResolver();
final Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
List<Contact> contacts = new ArrayList<>();
final int nameIdx = cur.getColumnIndex(DISPLAY_NAME);
final int idIdx = cur.getColumnIndex(ContactsContract.Contacts._ID);
while (cur.moveToNext()) {
String name = cur.getString(nameIdx);
String id = cur.getString(idIdx);
contacts.add(new Contact(name, id));
}
cur.close();
解决方案是筛选 IN_VISIBLE_GROUP = 1 的联系人。
final String selection = String.format("%s = ?", ContactsContract.Contacts.IN_VISIBLE_GROUP);
final String[] selectionArgs = new String[] { "1" };
final Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, selection, selectionArgs, null);
我也尝试了 IN_DEFAULT_DIRECTORY = 1,它也运行良好,但仅在 Lollipop (21) 和更新版本上受支持。
我在Android 6中遇到了类似的问题。当您使用
查询时,某些联系人没有显示出来
ContactsContract.Contacts.IN_VISIBLE_GROUP = 1
然后我将选择更改为
String selection = "in_default_directory = 1"; // Aka ContactsContract.ContactsColumns.IN_DEFAULT_DIRECTORY
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor nameCursor = context.getContentResolver().query(uri, null, selection, selectionArgs, sortOrder);
现在 returns 所有联系人都按照联系人应用。
我正在使用如下代码,在我的 phone 上它有 returns 4000 多行,但在我的 phone 上我的通讯录应用程序中有 295 个联系人。
这是怎么回事?我一直在阅读联系人数据库,但我还不够熟悉,无法弄清楚。
谢谢!
final ContentResolver cr = getContentResolver();
final Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
List<Contact> contacts = new ArrayList<>();
final int nameIdx = cur.getColumnIndex(DISPLAY_NAME);
final int idIdx = cur.getColumnIndex(ContactsContract.Contacts._ID);
while (cur.moveToNext()) {
String name = cur.getString(nameIdx);
String id = cur.getString(idIdx);
contacts.add(new Contact(name, id));
}
cur.close();
解决方案是筛选 IN_VISIBLE_GROUP = 1 的联系人。
final String selection = String.format("%s = ?", ContactsContract.Contacts.IN_VISIBLE_GROUP);
final String[] selectionArgs = new String[] { "1" };
final Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, selection, selectionArgs, null);
我也尝试了 IN_DEFAULT_DIRECTORY = 1,它也运行良好,但仅在 Lollipop (21) 和更新版本上受支持。
我在Android 6中遇到了类似的问题。当您使用
查询时,某些联系人没有显示出来ContactsContract.Contacts.IN_VISIBLE_GROUP = 1
然后我将选择更改为
String selection = "in_default_directory = 1"; // Aka ContactsContract.ContactsColumns.IN_DEFAULT_DIRECTORY
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor nameCursor = context.getContentResolver().query(uri, null, selection, selectionArgs, sortOrder);
现在 returns 所有联系人都按照联系人应用。