【问题标题】:Android: Only retrieve contacts with numbersAndroid:仅检索带有数字的联系人
【发布时间】:2013-01-26 22:12:32
【问题描述】:

我目前有以下代码可以从通讯录中检索联系人:

Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME
    };
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    Cursor cursor = getContentResolver().query(uri, projection, selection, null, sortOrder); 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
            android.R.layout.simple_list_item_multiple_choice, 
            cursor, 
            new String[] {ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts._ID}, 
            new int[] { android.R.id.text1},0);
    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    setListAdapter(adapter);

不过,这也会在我的 Nexus 4 上返回我的 facbook 联系人。我的选择有问题吗?

谢谢

【问题讨论】:

    标签: java android android-contacts


    【解决方案1】:

    您可以通过在投影和选择中添加ContactsContract.Contacts.HAS_PHONE_NUMBER 来过滤查询结果以仅包含具有电话号码的联系人。

    将您的第二个和第三个语句更改为如下所示:

    String[] PROJECTION = { 
    ContactsContract.Contacts._ID, 
    ContactsContract.Contacts.DISPLAY_NAME, 
    ContactsContract.Contacts.HAS_PHONE_NUMBER
    };
    String selection = "(" + ContactsContract.Contacts.IN_VISIBLE_GROUP + 
    " = '1' AND (" + ContactsContract.Contacts.HAS_PHONE_NUMBER + " != 0 ))";
    

    结果光标将只包含带有电话号码的联系人。

    【讨论】:

    • 原来我也必须将它添加到我的选择中。谢谢!
    • 你是对的,你也需要将它添加到选择中。我刚刚更新了我的答案。
    【解决方案2】:

    如果认为这是正常行为,因为您的 Facebook 联系人基本上是...联系人,因此它们会被您的代码检索。 我认为最好的过滤方法是遍历返回的数据并删除没有数字的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2016-04-08
      • 1970-01-01
      相关资源
      最近更新 更多