繁体   English   中英

Android检索一组类似于内置联系人应用程序的联系人

[英]Android retrieve a set of contacts similar to built in Contacts app

我正在使用如下代码,在我的手机上它返回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();

解决方案是过滤具有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);

现在,它会根据“联系人”应用返回所有联系人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM