我正在使用如下代码,并且在我的手机上它返回4000多行,但在我的手机上,我在联系人应用中有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();
答案 0 :(得分:1)
解决方案是过滤具有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)和更新版本。
答案 1 :(得分:1)
我在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);
现在它按照联系人应用程序返回所有联系人。