Android:获取本地通讯簿的所有联系人

Android:获取本地通讯簿的所有联系人,android,android-contacts,contactscontract,contact-list,Android,Android Contacts,Contactscontract,Contact List,我在应用程序中准确显示手机通讯录中的联系人时遇到问题 从google联系人应用程序中,我发现了许多不同的版本,如何查询这些联系人: 使用无选择 Uri uri = ContactsContract.CONTACT.CONTENT_URI; getActivity().getContentResolver().query(uri,PROJECTION, null, null, null); 仅使用具有可见组==1的联系人 Uri uri = ContactsContract.CONTACT.C

我在应用程序中准确显示手机通讯录中的联系人时遇到问题

从google联系人应用程序中,我发现了许多不同的版本,如何查询这些联系人:

  • 使用无选择

    Uri uri = ContactsContract.CONTACT.CONTENT_URI;
    getActivity().getContentResolver().query(uri,PROJECTION, null, null, null);
    
  • 仅使用具有可见组==1的联系人

    Uri uri = ContactsContract.CONTACT.CONTENT_URI;
    String selection = Contacts.IN_VISIBLE_GROUP + "=1"
    getActivity().getContentResolver().query(uri,PROJECTION, selection, null, null);
    
  • 或使用目录查询参数

    Uri uri = Contacts.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT)).build();
    getActivity().getContentResolver().query(uri, PROJECTION, null, null, null);
    
  • 其中,作为最后一个提供了最佳结果,但没有任何查询是真正令人满意的!:( 我在不同的设备上测试了所有这些,但始终无法获得电话簿中联系人的确切数量

    有人知道为什么没有查询适用于所有设备吗?


    以下是我的测试结果:

    =================================================================

    |设备\选择|电话簿|编号(1)|可见组(2)|目录。默认值(3)|

    =================================================================

    |星系S | 288 | 302 | 288 | 288|

    |Nexus 4 | 61 | 196 | 60 | 61|

    |Xperia Go | 32 | 46 | 32 | 33|

    |Nexus 5 | 109 | 168 | 108 | 109|

    |星系S3 | 124 | 124 | 2 | 124|

    |Xperia Z | 157 | 254 | 156 | 180|

    =================================================================