【问题标题】:Android retrieve a set of contacts similar to built in Contacts appAndroid检索一组类似于内置联系人应用程序的联系人
【发布时间】:2015-01-17 23:58:40
【问题描述】:

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

【问题讨论】:

  • 传递null 投影将返回所有列。 Docs
  • 是的。不过,我的问题是关于行,而不是列。
  • 您可能希望使用ContactsContract.Contacts.HAS_PHONE_NUMBER = 1 作为您的selection argument
  • 正如我在下面提到的,我不在乎他们是否有电话号码。我最终做的是使用 IN_DEFAULT_DIRECTORY=1 作为我的选择。
  • 投反对票是因为为什么?

标签: android android-contacts


【解决方案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) 和更新版本上受支持。

【讨论】:

    【解决方案2】:

    我在 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);
    

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

    【讨论】:

      猜你喜欢
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多